angularJS中的新内容,我想知道以下代码之间的优缺点是什么? 建议使用哪种?
$routeProvider.when('foo', {
templateUrl: 'foo.html',
controller: fooCtrl
function fooCtrl() {
//something here
}
});
或
$routeProvider.when('foo', {
templateUrl: 'foo.html'
});
app.controller("fooCtrl", function() {
//something here
});
//in html
<div ng-controller="fooCtrl"></div>
答案 0 :(得分:0)
我更喜欢第二种方法,并在开发我们的应用程序时使用它。 这是一种优雅的编码方式,可以从控制器中分离您的路线配置,模块布线等。我们可以在一个主文件中写出routes-config说 app.coffee [我用coffeescript]定义如
routesConfig = ($route) ->
$route.when('/employees',
{templateUrl: 'employee.employeeView.html'})
在这里定义routesconfig和接线模块[例如:employee.employeeController]。
modules = ['employee.employeeController', 'user.userController']
你可以从这里开始创建角度应用程序,
m = angular.module('app', modules)
m.config['$route', routesConfig]
现在您可以单独指定控制器,例如 employeeController.coffee
name = 'employee.employeeController'
mod = angular.module(name, [])
mod.controller(name, [
'$scope'
'$log'
($scope, $log) ->
$scope.name = 'java'
在您的视图中,请说 employeeView.html
<div ng-controller="employee.employeeController">
<div class ="info">
Name is {{name}}
</div>
基本上我们将控制器,视图,应用程序配置彼此分开。
答案 1 :(得分:0)
要添加特定于您问题的内容,
如果您使用的是第一种方法,那么可能您将控制器用作 路径控制器 ,并且 第二种方法,它是 View Controller 。 在这两种情况下,控制器都将针对上述路径进行实例化。
例如,我有一个主页index.html,我在基本的html模板中添加了许多视图( ng-view )。 如果此模板中有两个不同的视图部分,请说“section1”和“section2”,并且每个部分都包含在内 使用 ng-view ,您可能需要两个不同的控制器,并且可以使用第二种方法定义它们。 使用此类型的控制器使用数据,函数,监视等初始化范围,并使用 ng-controller 在视图中引用控制器。
如果你有一个部分,说'section1'[代表主html页面]是通过ng-view包含的,它包含了section1和section2, 那个视图需要路由控制器。
不要将这两种方法用于单个视图/路由,因为这会导致创建同一控制器的两个实例 对于同一条路线。
我想在这里添加两个链接,这些链接可以解决这个问题(你的查询)并解决这个问题(在两个地方定义控制器的问题)
https://groups.google.com/forum/?fromgroups=#!topic/angular/52zE0ibOAgk
AngularJS can a $on method be called more than once for a single $broadcast?