我目前正在使用Angular JS进行一个项目,我需要能够初始化和销毁控制器和作用域,以便能够在同一模态中显示不同的内容。我遇到的问题是,当我编译了新的控制器,$destroy事件被立即触发,因此范围上的所有观察者都被销毁。
控制器1
app.controller('MainCtrl', function($scope, $compile) {
$scope.model = { name: 'World' };
$scope.name = "Felipe";
var DOM = '<div ng-controller="Ctrl2">{{model}}<input type="text" ng-model="model.name"/></div>';
var newScope = $scope.$new();
var elem = $compile(DOM)(newScope);
$('#test1').append(elem);
});
正在插入的控制器2
app.controller('Ctrl2', function($scope) {
$scope.model = { name: 'World2' };
$scope.name = "Felipe2";
$scope.$watch('$destroy', function() {
$('#errorMessage').html('Scope was destroyed');
console.log('destroyed scope');
});
});
html <body ng-controller="MainCtrl">
<div id="test1"></div>
<div id="errorMessage"></div>
</body>
我已经在最小的柱塞中复制了错误,其中文本"范围被销毁"显示在插入控制器的范围上调用$destroy时的结果中。
感谢任何帮助/解决这个问题的方法,或者我应该如何从一开始就做的指导。
没有破坏控制器。您正在监视$destroy
,因此当作用域上的$destroy
属性作为控制器实例化的一部分被初始化时,它会触发监视。监听销毁事件的正确方法是使用$on
。
$scope.$on('$destroy', function() {
$('#errorMessage').html('Scope was destroyed');
console.log('destroyed scope', arguments);
});