AngularJS控制器的生命周期是多少?
有人可以澄清一下AngularJS控制器的生命周期是什么吗?
- 控制器是单例的,还是按需创建/销毁的?
- 如果是后者,什么触发了控制器的创建/销毁?
考虑以下示例:
var demoApp = angular.module('demo')
.config(function($routeProvider, $locationProvider) {
$routeProvider
.when('/home', {templateUrl: '/home.html', controller: 'HomeCtrl'})
.when('/users',{templateUrl: '/users.html', controller: 'UsersCtrl'})
.when('/users/:userId', {templateUrl: '/userEditor.html', controller: 'UserEditorCtrl'});
});
demoApp.controller('UserEditorCtrl', function($scope, $routeParams, UserResource) {
$scope.user = UserResource.get({id: $routeParams.userId});
});
例如:
在上面的示例中,当我导航到时/users/1
,将加载用户1并将其设置为$scope
。
然后,当我导航到时/users/2
,将加载用户2。是相同的UserEditorCtrl
重用实例,还是新创建的实例?
- 如果是新实例,什么触发了第一个实例的销毁?
- 如果重复使用,它如何工作?(即,加载数据的方法似乎在创建控制器时运行)
-
好吧,实际上问题是
ngView
控制器的生命周期是多少。控制器不是单例。任何人都可以创建一个新的控制器,并且它们永远不会被自动销毁。事实是,它通常与其基础范围的生命周期相关联。销毁其范围时,不会自动销毁该控制器。但是,销毁基础作用域后,其控制器就没有用了(至少在设计上应该如此)。
回答您的特定问题后,每次进行导航时,
ngView
指令(以及ngController
指令)始终会创建一个新的控制器和一个新的作用域。而最后的范围将要毁灭为好。生命周期“事件”非常简单。您的 “创建事件” 是控制器本身的构造。只需运行您的代码。要知道什么时候变得无用( “破坏事件”
),请监听作用域$destroy
事件:$scope.$on('$destroy', function iVeBeenDismissed() { // say goodbye to your controller here // release resources, cancel request... })
对于
ngView
具体情况,你可以当内容被通过范围事件时加载的认识$viewContentLoaded
:$scope.$on('$viewContentLoaded', function readyToTrick() { // say hello to your new content here // BUT NEVER TOUCHES THE DOM FROM A CONTROLLER });
-
AngularJS控制器的生命周期是多少?
2021-02-02 关注 0 浏览70 1答案
-
AngularJS 控制器的生命周期是什么?
2022-07-28 关注 0 浏览13 1答案
-
Spring MVC中控制器的生命周期
2021-02-02 关注 0 浏览99 1答案
-
Web容器如何管理弹簧控制器的生命周期
2021-02-02 关注 0 浏览125 1答案
-
C++ 函数中静态变量的生命周期是多少?
2022-03-22 关注 0 浏览32 1答案
-
angularjs 1.x支持生命周期
2021-02-01 关注 0 浏览69 1答案
-
何时使用AngularJS`$ onInit`生命周期挂钩
2021-02-01 关注 0 浏览61 1答案
-
需要父指令控制器的AngularJS指令控制器?
2021-02-01 关注 0 浏览83 1答案
-
项目生命周期不同于产品生命周期,因为项目生命周期:
2022-05-21 关注 0 浏览28 1答案
-
.netcore如何控制对象的生命周期的
2022-09-21 关注 0 浏览44 0答案