加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

AngularJS控制器的生命周期是什么?

发布时间:2020-12-17 09:26:21 所属栏目:安全 来源:网络整理
导读:有人可以澄清一下AngularJS控制器的生命周期吗? 是一个控制器单例,还是按需创建/销毁? 如果后者,什么触发控制器的创建/销毁? 考虑下面的例子: var demoApp = angular.module('demo') .config(function($routeProvider,$locationProvider) { $routeProv
有人可以澄清一下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指令)将总是create a new controller and a new scope每次导航发生。还有last scope is going to be destroyed。

生命周期“事件”很简单。你的“创建事件”是你的控制器本身的结构。只需运行你的代码。要知道它何时变得无用(“销毁事件”),监听范围$ 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
});

Here is a Plunker与概念证明(打开您的控制台窗口)。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读