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

Yog*_*gaj 15 angularjs

有没有办法强制刷新一次性绑定(v1.3中存在的本机一次性绑定+而不是BindOnce库),而不必重新编译整个DOM节点(这就是kcd-recompile指令似乎是这样做)

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

<span ng-bind="::firstname" refresh-on="firstNameUpdated"></span>
Run Code Online (Sandbox Code Playgroud)

在这里,我希望将内容span更新为当前值$scope.firstname.

我想象的方式是使用指令refresh-on,它在接收事件时强制刷新"firstNameUpdated".

Kas*_*wau 12

这里有无耻的商业广告,我一直在修修补补.

角结合 - 通知

对于您的用例,它看起来像这样:

<span bind-notifier="{fName:firstName}" ng-bind=":fName:firstName"></span>
Run Code Online (Sandbox Code Playgroud)

fNameeventKey 在哪里,firstName是被监视的表达式.

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

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

尽管如此,我并没有看到为单个 boundValue 做这件事的巨大收获.

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


Cra*_*aig 10

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

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

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

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

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

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