2015-05-13 62 views
1

我跑進前些天下的代碼塊返回一個值,而我試圖找出到底爲什麼筆者可能選擇return init();,而不是做一些像AngularJS - 明確從控制器

$scope.init = function() {...}; 

並用ng-click或其他東西來稱呼它。 下面的代碼:

myApp.controller("PlaylistCtrl", [ 
    "$scope", "tracksService", function($scope, tracksService) { 
    var init; 
    init = function() { 
     $scope.addTrack("Jay-Z - 99 Problems"); 
     return $scope.tracks = $scope.getTracks(); 
    }; 
    $scope.getTracks = function() { 
     return tracksService.tracks(); 
    }; 
    $scope.addTrack = function(trackTitle) { 
     if (trackTitle !== "") { 
     return tracksService.addTrack(trackTitle); 
     } 
    }; 
    return init(); 
    } 
]); 

所以當看臺上的問題是:什麼是從控制器返回值的目的是什麼?它利用了哪些附加功能?這是否會導致init()在控制器啓動後運行 - 如果沒有,那麼這裏的具體用途是什麼?任何幫助表示讚賞。謝謝。

+1

控制器的返回值是控制器對象實例 - 播放列表控件。因此,您可以添加屬性和方法來附加到控制器的「返回值」,而不是將它們附加到繼承的$ scope變量。有關更多詳細信息,請參閱http://toddmotto.com/digging-into-angulars-controller-as-syntax/。 –

回答

1

沒有具體的含義,因爲刪除return不會改變任何東西。

如果你看看其他功能,那麼開發人員似乎有從每個功能返回的習慣,即使沒有必要。

這可能只是一種習慣。在某些情況下,它可以幫助開發人員確保初始化塊的結束,將函數聲明放在下面,例如在這個小例子中:

// Initialization 
var foo = 'bar'; 
doFoo(); 
doBar(); 

return; // <- end of declarative block 

// Methods 
function doFoo() { ... } 
function doBar() { ... } 
+0

http://jsfiddle.net/gvJdn/158/ 在這個小提琴中,看起來'''init()''導致init函數在啓動時運行(請注意'''{{tracks} }'''在沒有返回'''init()'的情況下被填充 - '''''''''''''''你不需要顯式地將init''附加到$''''''''''' (')'''運行? –

+0

我不是超級舒適的這種語法(CoffeScript?),但我可以向你保證不,返回'init()'或不會對Angular循環產生任何影響,但當然會調用它,'init()'由控制器執行,這意味着只要應用程序由Angular編譯(或引導),''{你不需要觸發任何東西來讓一個控制器運行它的代碼 – floribon

+0

真棒。感謝您的幫助。 –