2014-12-05 84 views
2

阅读api和开发指南后,我仍然不明白在给定路由中声明'controller'所提供的功能。现在我只是在我的视图中将我的控制器声明为ng-controller指令。 ngRoute是否只是提供一种替代方法?是否需要角ngRoute'Controller'声明?

要在代码我的问题明确,见下图:

--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' }); 
}]); 
+1

我不知道所有的细节,但至少ng-route还提供了'resolve'功能。 – Rasalom 2014-12-05 10:42:26

+0

当你在路由中指定控制器时,你不需要在视图中指定ng-controller标记。 – 2014-12-05 10:45:26

+0

@ TechMa9iac - 那为什么要这样呢? – aaaaaa 2014-12-05 10:46:01

回答

3

有定义控制器视图两种方式。

  1. 无论是在在NG-控制器视图的NG-路线
  2. 控制器声明。

任何一个都没问题。

2

你应该选择一个选项,因为使用两者实际上会给你重复控制器,即两者都将被使用。如果您使用Routes,那么你可以指定一些附加的属性,如决心已经在评论中提到,这将让你执行一个动作,或者提供补充数据等

看看这个文章Using Resolve In Angular,了解更多信息。

此外,你应该看看使用Controller As,这将为你打开未来打样。约翰帕帕有几个博客和视频,他赞扬使用控制器为和使用var vm = this;风格的语法,看看here

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

+0

我实际上使用两者进行了测试,代码没有执行两次。这只是未定义的行为?如果你认为情况不是这样,我也可以仔细检查我的测试用例。编辑:并感谢提及'控制器为'。我已经在所有“角度”入门文章中忘记了它。 – aaaaaa 2014-12-05 11:38:28

+1

奇怪的是,昨晚我正在观看一个PluralSight视频,这个副作用就是一个例子......如果你有订阅,那是John Papa的Clean Code。 – christiandev 2014-12-05 11:44:02

+0

我不知道 - 但我绝对感谢小费。 – aaaaaa 2014-12-05 11:44:48

相关问题