2013-11-25 42 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