有没有办法强制刷新一次性绑定(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
时强制刷新。
答案 0 :(得分:12)
这里有无耻的广告,因为我一直在修修补补。
对于您的用例,它将如下所示:
<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部分,然后将其重新绑定,则会重新绑定到新值。