Javascript Angular.js deep watch 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> 在我的控制器中有这样一个

我有一个像这样的CoffeeScript课程:

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
回调被调用-