AngularJS控制器的生命周期是什么?
有人可以澄清一下AngularJS控制器的生命周期是什么?
- 控制器是单身人士,还是按需求创build/销毁?
- 如果是后者,是什么触发了控制器的创build/销毁?
考虑下面的例子:
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
实例是否被重用,或者是创build了一个新实例?
- 如果是新实例,是什么触发了第一个实例的破坏?
- 如果它被重用,这是如何工作的? (即,加载数据的方法似乎在创build控制器时运行)
那么,实际上问题是什么ngView
控制器的生命周期。
控制器不是单身人士。 任何人都可以创build一个新的控制器,而且不会自动销毁。 事实上,它一般是绑定到其基础范围的生命周期。 控制器在其范围被破坏时不会自动销毁。 但是,在销毁基础范围之后,其控制器是无用的(至less应该是devise的)。
回答你的具体问题, ngView
指令(以及ngController
指令)总是会在每次导航时创build一个新的控制器和一个新的范围 。 最后一个范围也将被销毁 。
生命周期“事件”非常简单。 你的“创造事件”是你的控制器本身的构造。 只要运行你的代码。 要知道什么时候它变得无用( “销毁事件” ),请听范围$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 });
这是一个概念certificate的打砖块 (打开你的控制台窗口)。
- ng-repeat指令对数据进行sorting(key,value)
- 如何将数据作为表单数据而不是请求有效载荷发布?
- 如何在AngularJS中使用ng-repeat迭代键和值?
- 如何正确使用AngularJS中的HTTP.GET? 具体而言,对于外部API调用?
- 与$ location.search():如何从url中删除参数,当它为null
- 在AngularJS中编写指令时,如何决定是否不需要新的范围,新的子范围或新的隔离范围?
- Angular指令templateUrl相对于.js文件
- 如何在ui-router中使用ui-sref传递参数给控制器
- 从jquery $ .ajax到angular $ http