我正在尝试弄清楚如何为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 开发人员指南:从以前的版本迁移