2013-11-25 88 views
0

我一直在開發一些角度控制器,我一直在提出一個我不太喜歡的模式。鑑於以下幾點:AngularJS中的Init方法?

app.controller('RecordCtrl', ['$scope', function AppBuilderCtrl($scope) { 

     // do lots of object initing here ... 
    $scope.model = { ... }; 
    $scope.defs = $scope.buildDefs($scope.model); 

    // lots of functions on scope ... 
    $scope.defs = function(model) { ... }; 
}); 

defs拋出未定義(杜它不是直到之後定義),但是我最終感動了很多我的初始化代碼,這似乎不是很大的底部。我想我可以做這樣的事情:

// top of controller 
init = function(){ ... } 

// all my methods here 

init(); 

但這也是呃。有什麼想法嗎?

回答

1

看起來你在你的文章中混淆了一些東西 - 你所描述的問題在代碼中並不明顯。無論如何,我想我明白你的意思了。解決方案是服務。您不應該在控制器中運行功能。控制器僅用於將數據連接到視圖。因此,如果您需要通過函數創建某些內容,那麼該函數將包含在您傳遞給控制器​​的服務中,而不是控制器本身。

Here's an example (click for live demo).

<p>{{foo.bar}}</p> <!-- 123 --> 

JS:

var app = angular.module('myApp', []); 

app.factory('myService', function() { 
    var myService = { //put your methods in services like this 
    create: function() { 
     return { 
     bar: '123' 
     }; 
    } 
    }; 
    return myService; 
}); 

app.controller('myCtrl', function($scope, myService) { //pass the service in 
    $scope.foo = myService.create(); //method is available! 
    console.log($scope.foo); 
}); 
+0

我看到...我下的印象,服務被更多用於AJAX請求和輔助方法的模型從返回。 – amcdnl

+0

@amcdnl是的,他們也用於此,但不是唯一的。 「角度服務是單個對象或功能,執行Web應用程序通用的特定任務。」根據http://docs.angularjs.org/guide/dev_guide.services.understanding_services – m59