【问题标题】:What to do to fix race condition when setting ng-init from a cookie从 cookie 设置 ng-init 时如何解决竞争条件
【发布时间】:2014-05-20 15:49:20
【问题描述】:

我需要使用 angularjs 访问数据,就像在必须设置 ng-init 属性的上下文中使用简单的静态

来自 cookie 的数据。

这应该可行,但是,我部分使用 {{}} 访问数据返回空字符串。

我怀疑这是比赛条件的问题。

简化的 HTML 代码如下(代码在 ng-controller 中):

<script>
    var data = $.cookie("data");    
    $("#data").attr("ng-init", data);
</script>

<div> Data is '{{data}}'</div>

【问题讨论】:

  • 你试过$apply()$scope.data吗?这就是我更新观点的方式

标签: angularjs race-condition angularjs-ng-init


【解决方案1】:

看起来您正在使用 jquery 来获取 cookie。为什么不直接使用 angular $cookie service,它可以让您直接从控制器中访问 c​​ookie。这将完全消除使用 ng-init 的需要。根据我的经验,ng-init 仅在您需要初始化在服务器端打印出来的内容时才有用。

angular.module('test', []).controller('TestCtrl', function($scope, $cookies) {
  $scope.data = $cookies.data;
});

【讨论】:

  • 这是完成工作的一种方式。但我不想污染我的控制器范围,因此不污染外部模型。查看建议的 $apply
  • ng-init 仅用于从服务器传递变量,这意味着在引导 Angular 之前这些值将存在于 DOM 中。如果您希望使用 ng-init 根据 cookie 进行填充,则必须在服务器端执行此操作。老实说,我认为在页面上包含一个全新的 jquery 库以及用于设置值的额外脚本标签会污染您的项目,而不仅仅是控制器中的一行。
  • 无论如何,你是对的。我这样做。非常感谢乔(顺便说一句,不错的网站 shah!)
  • 根据我现在的反馈,这显然是 @theJoeBiz 的正确选择,非常感谢!
猜你喜欢
  • 2013-10-11
  • 2013-08-03
  • 2019-08-20
  • 1970-01-01
  • 1970-01-01
  • 2015-08-13
  • 1970-01-01
  • 1970-01-01
  • 2019-09-19
相关资源
最近更新 更多