亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

AngularJS控制器的生命周期是多少?

AngularJS控制器的生命周期是多少?

慕娘9325324 2019-10-05 11:26:36
有人可以澄清一下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重用實例,還是新的實例被創建?如果是新實例,什么觸發了第一個實例的銷毀?如果重復使用,它如何工作?(即,加載數據的方法似乎在創建控制器時運行)
查看完整描述

2 回答

?
POPMUISE

TA貢獻1765條經驗 獲得超5個贊

好吧,實際上問題是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(打開控制臺窗口)。


查看完整回答
反對 回復 2019-10-05
?
白衣非少年

TA貢獻1155條經驗 獲得超0個贊

viewContentLoaded僅在您使用超時時才有效,因為它是在模板加載之前分派的。文檔說的相反,但是template: "HTML STRING"當它是異步加載的模板文件時,它們引用的是raw 。

查看完整回答
反對 回復 2019-10-05
  • 2 回答
  • 0 關注
  • 851 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號