2013-04-01 19 views
0

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> 
+1

第一個是無效的JS代碼會給你語法錯誤。 – Stewie

回答

0

我傾向於第二種方法,並開發應用程序時使用它。 它是編碼的優雅方式,從控制器分離您的路由配置,模塊佈線等。我們可以寫在主文件routesconfig說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] 

現在你可以seperately指定控制器,在說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> 

基本上我們分開控制器,查看,彼此的應用程序配置。

0

要添加一些具體的事情你的問題,

如果您使用的是第一種方式,那麼很可能你正在使用您的控制器作爲路徑控制器,並在 第二種方法,它是一種視圖控制器。 在這兩種情況下,控制器將被實例化爲所述的路線。

例如,我有一個主頁index.html,我在基本的html模板中添加了很多視圖(ng-view)。 如果你在這個模板中有兩個不同的視圖部分,比如'section1'和'section2',並且每個都包含在內 和ng-view,那麼你可能需要兩個不同的控制器,並且很好的使用第二種方法。 使用這種類型的控制器來初始化數據,功能,手錶等示波器,並使用ng-controller將您的視圖中的控制器引用。

如果你有一個部分,比如說'section1'[代表主要html頁面],通過ng-view包含section1和section2, ,那麼這個視圖需要路由控制器。

請勿將這兩種方法用於單個視圖/路由,因爲這會導致爲同一路由創建兩個具有相同控制器的實例 。

我想在這裏補充兩個環節這eloborates這個(查詢)和(在兩個地方定義控制器問題)解決這個查詢

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

AngularJS can a $on method be called more than once for a single $broadcast?

相關問題