programing

Angular의 라이프 사이클은 어떻게 됩니까?JS 컨트롤러?

bestcode 2022. 10. 18. 22:53
반응형

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지시하는(또한)ngControllerdirective)는 내비게이션이 발생할 때마다 항상컨트롤러와 새 스코프를 만듭니다.그리고 마지막 스코프도 파괴됩니다.

라이프 사이클의 「이벤트」는 매우 간단합니다."작성 이벤트"는 컨트롤러 자체의 구축입니다.코드를 실행하세요.무용지물이 되었을 때('파괴 이벤트')를 알기 위해 범위를 청취합니다.$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

반응형