AngularJS中的Init方法?

时间:2013-11-25 22:08:54

标签: angularjs

我一直在开发一些角度控制器,我一直在想出一个我不太喜欢的模式。鉴于以下内容:

 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 个答案:

答案 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);
});