有人可以澄清一下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
的相同實例,還是創建了新實例?
- 如果是新實例,是什麼觸發了第一個實例的破壞?
- 如果它被重用,它是如何工作的? (即,加載數據的方法似乎在創建控制器時運行)
現在破壞$ scope的代碼存在於https://github.com/angular/angular.js/blob/65f5e856a161e7c91b9ebde1360242dc704d0510/src/ngRoute/directive/ngView.js#L179。非常有幫助,謝謝! – w00t
viewContentLoaded只在你使用超時時才起作用,因爲它在模板被加載之前被分派......文檔說的相反,但是當它是一個被加載的模板文件時,它們引用原始'template:「HTML STRING」'異步。 – user3338098