0
我有狀態A和狀態B.兩種狀態的控制器是不同的。當我們改變到狀態B時,狀態B的範圍被創建。會執行狀態A的重新加載的範圍嗎?
當我們回到狀態A時,狀態B的範圍被破壞了嗎?
在回到狀態A時關閉狀態A重新加載?
然後視圖重新加載多少次?
我有狀態A和狀態B.兩種狀態的控制器是不同的。當我們改變到狀態B時,狀態B的範圍被創建。會執行狀態A的重新加載的範圍嗎?
當我們回到狀態A時,狀態B的範圍被破壞了嗎?
在回到狀態A時關閉狀態A重新加載?
然後視圖重新加載多少次?
當我們回過頭來狀態的,沒有狀態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>
當詢問關於由您的代碼中的問題的問題,你會得到更好的答案,如果你提供的代碼的人可以用它來重現問題。請參見[如何創建最小,完整和可驗證示例](http://stackoverflow.com/help/mcve)。 – georgeawg