AngularJS:强制刷新本机一次性绑定

时间:2015-04-23 13:43:56

标签: angularjs

有没有办法强制刷新一次性绑定(v1.3中存在的本机一次性绑定+而不是BindOnce库)而无需重新编译整个DOM节点(这是kcd-recompile directive似乎正在做的事情)

以下代码说明了我的问题:

threshold = 10**6
old_val = 0

while True:

    # [...] Do your stuff

    val = value // threshold
    if val > old_val
        print "Message"
        old_val = val

在此,我希望将<span ng-bind="::firstname" refresh-on="firstNameUpdated"></span> 的内容更新为span的当前值。

我想象的方式是使用指令$scope.firstname,它会在收到事件refresh-on时强制刷新。

2 个答案:

答案 0 :(得分:12)

这里有无耻的广告,因为我一直在修修补补。

angular-bind-notifier

对于您的用例,它将如下所示:

<span bind-notifier="{fName:firstName}" ng-bind=":fName:firstName"></span>

其中fName是eventKey,firstName是受监控的表达式。

它像一样像kcd-recompile(核心思想是一样的),但有一些主要的区别;

  • 我挂钩$parse服务 - 以便不重新编译整个DOM节点。
  • 支持多个key:val表达式进行重新绑定。

所有这些都说明了,我没有看到为 boundValue做这件事的巨大收获。

为单个值运行常规{{}} (imho)是一个更好的主意。你只是在这里为另一个交换一个$watch,kcd-recompile和bind-notifier只有在偶尔刷新多个值时才会真正闪耀。

答案 1 :(得分:10)

我必须这样做,因为我使用的是角度数据表,并且我不希望每次带有5秒计时器的旋转木马改变图像时数据表都会保持刷新。但是,我也想在特定情况下刷新表格。

我所做的是将整个数据表包装在ng-if =&#34;数据&#34;中,并设置一次性绑定到表中的所有ng-repeats(我有多个。一个用于动态设置列,一个用于行)。

然后,当我想刷新表格时,我首先这样做:

$timeout(function(){
    $scope.$apply(function(){
        $scope.data = null;
    });
});
//Put code to set $scope.data to a new value here

这会在重新创建之前从dom中删除整个表。重新创建时,一次性绑定将重新绑定。它有点贵,但它确实有效。

这就是你的答案。如果您使用ng-if从DOM中删除带有一次性绑定的html部分,然后将其重新绑定,则会重新绑定到新值。