是否需要角度ngRoute'控制器'声明?

时间:2014-12-05 10:40:59

标签: angularjs ngroute

在阅读了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' });
}]);

2 个答案:

答案 0 :(得分:3)

有两种方法可以为视图定义控制器。

  1. 在ng-route
  2. 的控制器声明中
  3. 在视图的ng-controller中。
  4. 任何一个都没问题。

答案 1 :(得分:2)

你应该选择另一个选项,因为使用它们实际上会给你重复的控制器,即两者都将被使用。如果您正在使用Routes,那么您可以指定一些其他属性,例如注释中提到的解析,这将允许您执行操作或提供补充数据等。

有关详细信息,请查看此文章Using Resolve In Angular

此外,您应该考虑使用Controller As,这将为您的未来打样做好准备。 John Papa有一些博客和视频,他赞扬使用Controller As并使用var vm = this;样式语法,看看here

另外,作为旁注,您应该在路线中使用.otherwise,因为这会捕获任何无效的请求,并且至少会从您的网站提供有效的网页。您可以在routeProvider documentation中看到这一点。