0

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>
4

2 回答 2

0

我更喜欢第二种方法,并在开发我们的应用程序时使用它。这是一种优雅的编码方式,将您的路由配置、模块接线等与控制器分开。我们可以将 routes-config 写在一个主文件中,比如app.coffee [I use coffeescript] 定义如下

routesConfig = ($route) ->
    $route.when('/employees',
        {templateUrl: 'employee.employeeView.html'})

在此处定义 routesconfig 和接线模块 [例如:employee.employeeController]。

modules = ['employee.employeeController', 'user.userController']

您可以从这里创建、启动您的 Angular 应用程序,

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>

基本上,我们将控制器、视图、应用程序配置彼此分开。

于 2013-04-01T15:09:17.587 回答
0

要添加特定于您的问题的内容,

如果您使用第一种方法,那么您可能将控制器用作Route Controller,而在第二种方法中,它是View Controller。在这两种情况下,控制器都会为上述路由实例化。

例如,我有一个主页 index.html,我在基本的 html 模板中添加了许多视图( ng-view )。如果您在此模板中有两个不同的视图部分,例如“section1”和“section2”,并且它们中的每一个都包含在ng-view中,那么您可能需要两个不同的控制器,并且最好使用第二种方法来定义它们。使用这种类型的控制器用数据、函数、手表等初始化范围,并使用ng-controller在视图中引用控制器。

如果你有一个部分,比如说'section1' [表示主 html 页面],它是通过封装 section1 和 section2 的 ng-view 包含的,那么该视图需要路由控制器。

不要将这两种方法用于单个视图/路由,因为它会导致为同一路由创建相同控制器的两个实例。

我想在这里添加两个链接,详细说明这个(你的查询)并解决这个查询(在两个地方定义控制器的问题)

https://groups.google.com/forum/?fromgroups=#!topic/angular/52zE0ibOAgk

AngularJS 可以为单个 $broadcast 多次调用 $on 方法吗?

于 2013-04-01T18:57:02.447 回答