Angular.js deep watch Coffeescript class instance

Angular.js deep watch Coffeescript class instance

本文关键字:class instance Coffeescript watch js deep Angular      更新时间:2023-09-26

我有一个这样的 CoffeeScript 类:

class Foo
    constructor: (@bar) ->
        setTimeout () =>
            @bar = "changed!"
        , 5000)

在我的控制器中有一个这样的列表:

$scope.list = [new Foo("1"), new Foo("2")]

我有这样的 HTML:

<ul>
    <li ng-repeat="baz in list">
        {{baz.bar}}
    </li>
</ul>

5 秒后,$scope.list项的值会更改,但这不会反映在 HTML 中。

事情部分连接正确,因为如果我添加此代码,一切正常(尽管略有延迟)。HTML 将重新绘制并正确更新。

setInterval () ->
    $scope.$apply () ->
        $scope.crashes = $scope.crashes
, 5000)    

有没有办法确保 HTML 在 CoffeeScript 类的属性更改时更新?

你试过吗:

$scope.$watch('crashes', function (newVal) {
  $scope.crashes = newVal
}, true);

将$watch的最后一个参数设置为真实,使其成为深度观察。

不要使用 setTimeout,因为 angularJS 不会跟踪更改,你需要像以前一样调用 $scope.$apply。使用$timeout。

编辑:您可以使用$timeout改进您发布的自定义超时解决方案,并删除 setInterval 和应用。