我一直在开发一些角度控制器,我一直在想出一个我不太喜欢的模式。鉴于以下内容:
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();
但那也是。有什么想法吗?
答案 0 :(得分: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);
});