gpt4 book ai didi

angularjs - 如何在范围内找到 watch 。$$watchers

转载 作者:行者123 更新时间:2023-12-01 02:17:20 26 4
gpt4 key购买 nike

我正在使用 angularjs 并且需要找到 ng-repeat 的 watch ,因为我需要 ng-repeat 从特定点停止工作。这是我的代码:

<ul>
<li ng-repeat="item in items">
<div>{{item.name}}</div>
</li>
</ul>

我需要找到 ng-repeat 的观察者。如果我转到 scope.$parent.$$watchers[x] 并执行 splice watch 被删除,但我如何才能找到特定的 watch ?

最佳答案

不可能找到 watch (见下面的解释),但你可以通过使用以下指令实现你想要的

app.directive('repeatStatic',
function factory() {
var directiveDefinitionObject = {
restrict : 'A',
scope : true, // this isolates the scope from the parent
priority : 1001, // ng-repeat has 1000
compile : function compile() {
return {
pre : function preLink(tElement, tAttrs) {
},
post : function postLink(scope, iElement, iAttrs, controller,
transcludeFn) {
scope.$apply(); // make the $watcher work at least once
scope.$$watchers = null; // remove the $watchers
},
};
}
};

return directiveDefinitionObject;
}
);

它的用法是

<ul>
<li repeat-static ng-repeat="item in items">
{{ item }}
</li>
</ul>

参见 http://plnkr.co/k9BTSk作为一个工作示例。

背后的道理是angular 指令 ng-repeat 指令使用内部函数 $watchCollection 添加一个自行创建的监听器来监视 items 对象。由于监听器是在此过程中创建的函数,并且不会作为引用保留在任何地方,因此没有好的方法可以正确识别从 $$watchers 列表中删除哪个函数。

但是可以通过使用属性指令将新范围强制进入 ng-repeat,这样 ng-repeat 添加的 $$watchers 与父范围隔离。因此,我们获得了范围的完全控制权。$$watchers。在 ng-repeat 使用填充值的函数后,立即可以安全地删除 $$watchers。此解决方案使用 hassassin 清理 $$watchers 列表的想法。

关于angularjs - 如何在范围内找到 watch 。$$watchers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22331185/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com