Angularjs - $scope.$destroy 不会删除观察者
Angularjs - $scope.$destroy doesn't remove watchers
我正在尝试弄清楚如何为Angularjs <= 1.2创建自己的"一次性绑定"。我找到了这个答案,描述了如何创建自己的绑定一次指令。在使用以下指令时,我确实看到了这一点:
app.directive('bindOnce', function() {
return {
scope: true,
link: function( $scope ) {
setTimeout(function() {
$scope.$destroy();
}, 0);
}
}
});
数据绑定一次。但是,我可以看到 $watchers 美元仍在。看看下面的 JSBin - 在控制台上运行注释的观察者计数代码将显示观察者仍然活着。
编辑:由于某种原因,当对 angular 1.3 使用相同的指令时,观察者计数 dod 更改为 0!!
使用 cleanup
函数删除观察程序:
function cleanup(element)
{
element.off().removeData();
var injector = currentSpec.$injector;
element.$injector = null;
// clean up jquery's fragment cache
angular.forEach(angular.element.fragments, function(val, key) {
delete angular.element.fragments[key];
});
angular.forEach(angular.callbacks, function(val, key)
{
delete angular.callbacks[key];
});
angular.callbacks.counter = 0;
}
使用自毁服务作为简单绑定一次:
function onetime()
{
/*...*/
onetime = Function;
}
angular.module('myApp').constant('bindonce', onetime);
angular.module('myApp').controller('foo', function($bindonce){
this.$inject = '$bindonce';
$scope.mybind = $bindonce();
}
使用迁移指南作为参考来查找重大更改:
引用
可测试性补丁.js
棱角分明的嘲讽.js
AngularJS 开发人员指南:从以前的版本迁移
相关文章:
- 未激发路由的控制器属性上的观察者
- 将属性设置为未定义时未通知观察者
- 检测 DIV 的高度何时变化,而无需轮询或突变观察者
- JavaScript:为什么Addy's观察者模式
- 设置多个观察程序以触发动态事件的角度替代解决方案 - 优化的观察者模式
- 被动.js模式间接观察者报告相同的值
- 将$scope对象作为参数提供给$digest中的观察者背后的逻辑
- 取代了棱角分明的深度观察者
- 突变观察者尚未定义
- 突变观察者未能检测到元素's删除dom
- 手动调整元素大小;不要在Chrome中激发突变观察者
- 共同描述编译器和观察者
- 如何确保对观察者的订阅调用最初接收到最新的值
- 未捕获的类型错误:无法执行'观察'在'突变观察者':参数1不是'节点'
- 在jQuery数据表中使用AngularJS观察者的方法是什么
- nodejs:原子文件替换操作,只触发一次一些观察者
- 阵列突变而不触发特定的观察者
- 无限循环当观察父对象时,观察者不更新任何值
- Angularjs - $scope.$destroy 不会删除观察者
- 如何从指令元素中删除角度观察者