AngularJS代码结构。它们有什么区别吗?

时间:2013-04-01 13:40:46

标签: javascript angularjs

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>

2 个答案:

答案 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?