在阅读了api和开发者指南后,我仍然不了解在给定路径中声明“控制器”所提供的功能。现在我只是在我的视图中将控制器声明为ng-controller指令。 ngRoute只是提供另一种方法吗?
要在代码中明确说明我的问题,请参阅以下内容:
--Index.html
...
<body ng-app="MyApp">
<div ng-view>
</div>
</body>
--View.html
<div id="myView" ng-controller="MyController">
...
</div>
--Route.js
var app = angular.module('MyApp', [ require('angular-route') ]);
app.controller('MyController', ['$scope', function ($scope) {
console.log('this gets executed as I would expect');
}])
.config(['$routeProvider', function($routeProvider) {
$routeProvider.when('/', { templateUrl: '/Index.html' })
.when('/view', { templateUrl: '/View.html' });
// below line makes no difference as an alternative to above
//.when('/view', { templateUrl: '/View.html', controller: 'MyController' });
}]);
答案 0 :(得分:3)
有两种方法可以为视图定义控制器。
任何一个都没问题。
答案 1 :(得分:2)
你应该选择另一个选项,因为使用它们实际上会给你重复的控制器,即两者都将被使用。如果您正在使用Routes
,那么您可以指定一些其他属性,例如注释中提到的解析,这将允许您执行操作或提供补充数据等。
有关详细信息,请查看此文章Using Resolve In Angular。
此外,您应该考虑使用Controller As,这将为您的未来打样做好准备。 John Papa有一些博客和视频,他赞扬使用Controller As并使用var vm = this;
样式语法,看看here。
另外,作为旁注,您应该在路线中使用.otherwise
,因为这会捕获任何无效的请求,并且至少会从您的网站提供有效的网页。您可以在routeProvider documentation中看到这一点。