Javascript Angular.js deep watch Coffeescript类实例
我有一个像这样的CoffeeScript课程:Javascript Angular.js deep watch Coffeescript类实例,javascript,angularjs,coffeescript,Javascript,Angularjs,Coffeescript,我有一个像这样的CoffeeScript课程: class Foo constructor: (@bar) -> setTimeout () => @bar = "changed!" , 5000) <ul> <li ng-repeat="baz in list"> {{baz.bar}} </li> </ul> 在我的控制器中有这样一个
class Foo
constructor: (@bar) ->
setTimeout () =>
@bar = "changed!"
, 5000)
<ul>
<li ng-repeat="baz in list">
{{baz.bar}}
</li>
</ul>
在我的控制器中有这样一个列表:
$scope.list = [new Foo("1"), new Foo("2")]
我有如下HTML:
class Foo
constructor: (@bar) ->
setTimeout () =>
@bar = "changed!"
, 5000)
<ul>
<li ng-repeat="baz in list">
{{baz.bar}}
</li>
</ul>
有没有办法确保当CoffeeScript类的属性更改时HTML会更新?您尝试过:
$scope.$watch('crashes', function (newVal) {
$scope.crashes = newVal
}, true);
将$watch的最后一个参数设置为true将使其成为深度监视。不要使用setTimeout,因为angularJS不会跟踪更改,您需要调用$scope。$apply与您一样。使用
编辑:您可以通过使用$timeout改进您发布的自定义超时解决方案,并删除setInterval和apply。如果您想让类angularjs保持自由,您该怎么办?
setTimeout
就是问题所在。它实际上是与接受回调的第三方库的集成。我使用了setTimeout
作为问题的简明示例。@请注意,即使您正在观看模型,$timeout也是必要的。如果你想让你的类angularjs保持自由,那么使用setTimeout,但是使用一个回调函数$apply@AlecGorge由于它是第三方的,您不想更改它,因此您似乎被超时解决方案卡住了。您可以通过使用$timeout来改进它,并删除setInterval和apply。不,这不起作用。如果在回调中放置断点/console.log
,则在类中的属性更改时不会调用该断点。实际上,几分钟后,它会出现,但不会立即出现。可能是其他原因导致了问题。1分钟后,我在另一个控制器中发出$http
请求。只要$http
请求完成,就会更新不同范围内的项目。大约在那时,$watch
回调被调用-