AngularJS - 激活所有带路由的控制器
AngularJS - activating all controllers with routing
我正在使用 AngularJS 并使用 ngRoute 进行路由。
我想知道当 Angular 路由到 "otherwise" 部分并激活所有控制器时,这是否是 Angular 的正常行为?
var angularApp = angular.module('AngularApp', ['ngRoute']);
angularApp.config(['$routeProvider',
function ($routeProvider) {
$routeProvider
.when('/ExpenseOverview', {
controller: 'ExpenseOverviewController',
templateUrl: 'Angular/Views/ExpenseOverview.vbhtml'
})
.when('/AddExpense',
{
controller: 'AddExpenseController',
templateUrl: 'Angular/Views/AddExpense.vbhtml'
})
.otherwise({ redirectTo: '/ExpenseOverview' });
}]);
我已经在每个控制器的最顶部放置了一个警报,甚至是我的工厂。在启动时,会显示所有警报。它不是一开始去 "ExpenseOverview",而是检查我的两个控制器,而不仅仅是绑定到“/ExpenseOverview”的控制器。
这可能是什么原因?
编辑: 知道 Angular 在启动时访问所有控制器是正常的,但主要问题尚未解决然而。 Whosebug 上的 another thread 对此进行了解释。我认为这与它有关,因为我不知道 Angular 这样做是正常的行为。
我可以说这个帖子已经关闭了,因为我的问题现在有了答案。
Angular 不会在启动时访问每个控制器,但是 ngRoute 会。在 $routeProvider 中具有相应路由条目的控制器中的任何初始化代码将在初始化时 运行。
这里有一个例子:http://plnkr.co/edit/WsvbKhcR74yoX80bskdb?p=preview
<!DOCTYPE html>
<html ng-app="app">
<head>
<script data-require="angular.js@*" data-semver="1.3.15" src="https://code.angularjs.org/1.3.15/angular.js"></script>
<script data-require="ng-route@*" data-semver="1.2.0" src="http://code.angularjs.org/1.2.0-rc.3/angular-route.js"></script>
</head>
<body ng-controller="main">
<h1>Hello {{test}}!</h1>
<div ng-view="">Hello?</div>
<script>
var app = angular.module('app', ['ngRoute']);
app.config(function ($routeProvider) {
$routeProvider
.when('/route1', {
controller: 'con1',
templateUrl: 'view1'
})
.when('/route2',
{
controller: 'con2',
templateUrl: 'view2'
})
.otherwise({ redirectTo: '/route1' });
});
app.controller('main', function($scope){
alert('1');
$scope.test = 'Yo.';
});
app.controller('con1', function($scope){
alert('2');
$scope.value = 'value1';
});
app.controller('con2', function($scope){
$scope.value = 'value2'
});
</script>
<script type="text/ng-template" id="view1">
View 1 {{value}}
</script>
<script type="text/ng-template" id="view2">
View 2 {{value}}
</script>
</body>
</html>
我正在使用 AngularJS 并使用 ngRoute 进行路由。 我想知道当 Angular 路由到 "otherwise" 部分并激活所有控制器时,这是否是 Angular 的正常行为?
var angularApp = angular.module('AngularApp', ['ngRoute']);
angularApp.config(['$routeProvider',
function ($routeProvider) {
$routeProvider
.when('/ExpenseOverview', {
controller: 'ExpenseOverviewController',
templateUrl: 'Angular/Views/ExpenseOverview.vbhtml'
})
.when('/AddExpense',
{
controller: 'AddExpenseController',
templateUrl: 'Angular/Views/AddExpense.vbhtml'
})
.otherwise({ redirectTo: '/ExpenseOverview' });
}]);
我已经在每个控制器的最顶部放置了一个警报,甚至是我的工厂。在启动时,会显示所有警报。它不是一开始去 "ExpenseOverview",而是检查我的两个控制器,而不仅仅是绑定到“/ExpenseOverview”的控制器。
这可能是什么原因?
编辑: 知道 Angular 在启动时访问所有控制器是正常的,但主要问题尚未解决然而。 Whosebug 上的 another thread 对此进行了解释。我认为这与它有关,因为我不知道 Angular 这样做是正常的行为。
我可以说这个帖子已经关闭了,因为我的问题现在有了答案。
Angular 不会在启动时访问每个控制器,但是 ngRoute 会。在 $routeProvider 中具有相应路由条目的控制器中的任何初始化代码将在初始化时 运行。
这里有一个例子:http://plnkr.co/edit/WsvbKhcR74yoX80bskdb?p=preview
<!DOCTYPE html>
<html ng-app="app">
<head>
<script data-require="angular.js@*" data-semver="1.3.15" src="https://code.angularjs.org/1.3.15/angular.js"></script>
<script data-require="ng-route@*" data-semver="1.2.0" src="http://code.angularjs.org/1.2.0-rc.3/angular-route.js"></script>
</head>
<body ng-controller="main">
<h1>Hello {{test}}!</h1>
<div ng-view="">Hello?</div>
<script>
var app = angular.module('app', ['ngRoute']);
app.config(function ($routeProvider) {
$routeProvider
.when('/route1', {
controller: 'con1',
templateUrl: 'view1'
})
.when('/route2',
{
controller: 'con2',
templateUrl: 'view2'
})
.otherwise({ redirectTo: '/route1' });
});
app.controller('main', function($scope){
alert('1');
$scope.test = 'Yo.';
});
app.controller('con1', function($scope){
alert('2');
$scope.value = 'value1';
});
app.controller('con2', function($scope){
$scope.value = 'value2'
});
</script>
<script type="text/ng-template" id="view1">
View 1 {{value}}
</script>
<script type="text/ng-template" id="view2">
View 2 {{value}}
</script>
</body>
</html>