angular的文档说,为了在控制器被销毁时执行清理代码,应该在范围内注册$ destroy事件.
$scope.$on("$destroy", function() { ... } );
Run Code Online (Sandbox Code Playgroud)
但是,当您使用controllerAs语法时,您无权访问$ scope.你如何注册$ destroy事件?
gka*_*pak 22
仅仅因为你使用controllerAs语法,它并不意味着没有$scope或你不能使用它.
实际上,所有的controllerAs操作都是this在$scope(在指定名称下)添加控制器.例如:
ng-controller="SomeCtrl as ctrl"
Run Code Online (Sandbox Code Playgroud)
将隐含地这样做:
.controller('SomeCtrl', function () {
this.value = 'something';
...
// Angular will implicitly so something equivalent to:
// $scope.ctrl = this;
}
Run Code Online (Sandbox Code Playgroud)
所以,没有什么可以阻止你使用它$scope(它实际上非常有用的东西,如$watch东西和发送/监听事件):
<!-- In the VIEW -->
<div ng-controller="SomeCtrl as ctrl">
Some value: {{ctrl.value}}
<button ng-click="ctrl.doSomething()">Some action</button>
</div>
Run Code Online (Sandbox Code Playgroud)
/* In the CONTROLLER */
.controller('SomeCtrl', function ($scope) {
this.value = 'some value';
this.doSomething = function () { ... };
$scope.$on('$destroy', function () {
// So some clean-up...
});
});
Run Code Online (Sandbox Code Playgroud)
另见这个简短的演示.
| 归档时间: |
|
| 查看次数: |
3514 次 |
| 最近记录: |