我想弄清楚如何为Angularjs< = 1.2创建我自己的“一次性绑定”。 我找到了这个answer,描述了如何创建自己的bindOnce指令。我确实看到使用以下指令时:
app.directive('bindOnce', function() {
return {
scope: true,
link: function( $scope ) {
setTimeout(function() {
$scope.$destroy();
}, 0);
}
}
});
数据绑定一次。 但是,我可以看到$$观察者仍在观看。看看下面的JSBin - 在控制台上运行注释的观察者计数代码将显示观察者仍然活着。
编辑:出于某种原因,当使用角度为1.3的相同指令时,观察者计数dod变为0!
答案 0 :(得分:-1)
使用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();
}
使用迁移指南作为参考来查找重大更改:
<强>参考强>