2017-03-16 36 views
0

我有狀態A和狀態B.兩種狀態的控制器是不同的。當我們改變到狀態B時,狀態B的範圍被創建。會執行狀態A的重新加載的範圍嗎?

  1. 當我們回到狀態A時,狀態B的範圍被破壞了嗎?

  2. 在回到狀態A時關閉狀態A重新加載?

  3. 然後視圖重新加載多少次?

+0

當詢問關於由您的代碼中的問題的問題,你會得到更好的答案,如果你提供的代碼的人可以用它來重現問題。請參見[如何創建最小,完整和可驗證示例](http://stackoverflow.com/help/mcve)。 – georgeawg

回答

1

當我們回過頭來狀態的,沒有狀態B的範圍被破壞?

是的,狀態B的範圍被破壞,因此狀態B的控制器範圍的$destroy被調用。 (如下面代碼段描述)

雖然回來狀態A,狀態確實的範圍甲重載?

是的,控制器A會重新實例化,並且它會每次加載給定的ng-view中的模板。

然後視圖重新加載多少次?

該視圖在每次訪問任何狀態時都會(重新)加載。該視圖的$scope發出$viewContentLoaded事件(ng-view docs)。 (所看到的片段下方


這裏有一個簡單的實施ui-router狀態來解釋這一信息。 (same in plnkr

(function() { 
 

 
    var myapp = angular.module('myapp', ["ui.router"]); 
 

 
    myapp.config(function($stateProvider, $urlRouterProvider) { 
 

 
    // For any unmatched url, send to /route1 
 
    $urlRouterProvider.otherwise("/route1") 
 

 
    $stateProvider 
 
     .state('route1', { 
 
     url: "/route1", 
 
     template: "<h3>List of Route 1 Items</h3><ul><li ng-repeat='item in items'>{{item}}</li></ul>", 
 
     controller: "route1ctrl" 
 
     }) 
 
     .state('route2', { 
 
     url: "/route2", 
 
     template: "<h3>List of Route 2 Things</h3><ul><li ng-repeat='thing in things'>{{thing}}</li></ul>", 
 
     controller: "route2ctrl" 
 
     }) 
 
    }); 
 

 
    myapp.controller('route1ctrl', ['$scope', function($scope) { 
 

 
    $scope.items = ["A", "List", "Of", "Items"]; 
 

 
    $scope.$on('$viewContentLoaded', function() { 
 
     console.log("route 1 list ctrl loaded") 
 
    }); 
 

 
    $scope.$on('$destroy', function() { 
 
     console.log("route 1 destroyed") 
 
    }); 
 
    }]); 
 

 
    myapp.controller('route2ctrl', ['$scope', function($scope) { 
 

 
    $scope.things = ["A", "Set", "Of", "Things"]; 
 

 
    $scope.$on('$viewContentLoaded', function() { 
 
     console.log("route 2 list ctrl loaded") 
 
    }); 
 

 
    $scope.$on('$destroy', function() { 
 
     console.log("route 2 destroyed") 
 
    }); 
 
    }]); 
 

 
})();
<!DOCTYPE html> 
 
<html ng-app="myapp"> 
 

 
<head> 
 
    <title>AngularJS: UI-Router Quick Start</title> 
 
    <link href="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/2.3.1/css/bootstrap.min.css" rel="stylesheet"> 
 
</head> 
 

 
<body class="container"> 
 
    <div class="navbar"> 
 
    <div class="navbar-inner"> 
 
     <a class="brand" href="#">Quick Start</a> 
 
     <ul class="nav"> 
 
     <li><a ui-sref="route1">Route 1</a></li> 
 
     <li><a ui-sref="route2">Route 2</a></li> 
 
     </ul> 
 
    </div> 
 
    </div> 
 

 
    <div class="row"> 
 
    <div class="span12"> 
 
     <div class="well" ui-view></div> 
 
    </div> 
 
    </div> 
 

 
    <!-- Angular --> 
 
    <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.4/angular.js"></script> 
 

 
    <!-- UI-Router --> 
 
    <script src="//angular-ui.github.io/ui-router/release/angular-ui-router.js"></script> 
 

 
    <!-- App Script --> 
 
    <script src="script.js"></script> 
 
    <script src="route1.js"></script> 
 
    <script src="route2.js"></script> 
 

 
</body> 
 

 
</html>

相關問題