【发布时间】:2013-09-02 11:43:09
【问题描述】:
在我的控制器中,我将变量“数据”设置为默认值。在我的原始项目中,我使用CouchCorner 从 CouchDB 中获取数据并更新数据。
在一个衍生词中,我观察变量数据并相应地更新元素。 但是,我遇到了“$digest 已经在进行中”的问题,导致指令没有正确更新。我已经找到了很多关于 $digest 问题的信息,但是我找不到任何适合我的问题的答案。
我创建了以下 jsFiddle,它使用 $timeout 而不是实际的 CouchDB 请求: http://jsfiddle.net/cwesM/4/
var App = angular.module('myApp', []);
function Ctrl($scope, $timeout) {
$scope.data="Initial";
$timeout(function(){
$scope.data="Updated"}, 1)
}
App.directive('chart', function(){
return{
restrict: 'E',
link: function(scope, elem, attrs){
scope.$watch(attrs.ngModel, function(v){
alert(v)
elem.html("Data="+v);
});
}
};
});
脚本在 1ms 后将“data”的初始值更改为“Updated”。但是指令没有更新,尽管 $watch 函数被执行了。 有趣的是,如果我删除 alert(),一切都会按预期进行。
如何避免 $digest 的冲突?
【问题讨论】:
-
我不明白。您链接的 jsFiddle 似乎完全符合我的预期。
-
请再次按fiddler中的“运行”。有时它第一次工作,但如果再试一次就不行。不知何故,加载/运行时问题。
-
我已经运行了十几次,都达到了预期的结果(Chrome)。您在哪个浏览器中执行此操作?
-
好提示!我正在使用 Firefox 17.0.8。将在家里尝试使用最新版本。结果是第一行被正确更新({{data}},但指令仍然是“初始”。我收到 $digest 错误消息。
-
@avanc 你可以试试这个解决方案。 stackoverflow.com/a/17510699
标签: javascript angularjs angularjs-directive