Scope $destroy事件在初始化新控制器时调用



我目前正在使用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);
   });

最新更新