Angular의 라이프 사이클은 어떻게 됩니까?JS 컨트롤러?
누가 Angular의 라이프 사이클을 명확히 해주시겠어요?JS 컨트롤러란?
- 컨트롤러는 싱글톤입니까, 아니면 온디맨드 방식으로 생성/파괴됩니까?
- 후자의 경우 컨트롤러의 생성/파괴를 일으키는 요인은 무엇입니까?
다음 예를 생각해 보겠습니다.
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
directive)는 내비게이션이 발생할 때마다 항상 새 컨트롤러와 새 스코프를 만듭니다.그리고 마지막 스코프도 파괴됩니다.
라이프 사이클의 「이벤트」는 매우 간단합니다."작성 이벤트"는 컨트롤러 자체의 구축입니다.코드를 실행하세요.무용지물이 되었을 때('파괴 이벤트')를 알기 위해 범위를 청취합니다.$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
});
여기 컨셉 프루프 기능이 있는 플런커가 있습니다(콘솔 창을 엽니다).
언급URL : https://stackoverflow.com/questions/16094940/what-is-the-lifecycle-of-an-angularjs-controller
'programing' 카테고리의 다른 글
C auto 키워드는 어디에서 사용됩니까? (0) | 2022.10.18 |
---|---|
로케이션 해시의 변경을 검출하려면 어떻게 해야 합니까? (0) | 2022.10.18 |
Jest 및 vue/test-utils를 사용하여 입력 파일을 테스트하는 방법 (0) | 2022.10.18 |
특정 유형의 모든 이벤트청취자 삭제 (0) | 2022.10.18 |
CTE를 사용한 MariaDB 10.3.14 DELETE 스테이트먼트에서 구문 오류가 발생함 (0) | 2022.10.18 |