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
});
개념 증명 이 포함 된 Plunker 가 있습니다 (콘솔 창 열기).
참고 URL : https://stackoverflow.com/questions/16094940/what-is-the-lifecycle-of-an-angularjs-controller
'IT story' 카테고리의 다른 글
node.js로 보안 REST API를 구현하는 방법 (0) | 2020.05.09 |
---|---|
Android의 FFmpeg (0) | 2020.05.09 |
CORS (Cross-Origin Resource Sharing) 사후 요청 작업 방법 (0) | 2020.05.09 |
페이지 처리 속도를 높이려면 이벤트 핸들러를 '수동'으로 표시하십시오. (0) | 2020.05.09 |
함수 인수에 별표가 있습니까? (0) | 2020.05.09 |