不清楚AngularJS工厂表示法的新风格

时间:2014-07-11 21:04:21

标签: angularjs angularjs-service angular-services

我在看this interesting piece on Angular best practices,并决定采用其中一些想法作为我自己的想法。然而,他的工厂符号对我来说是一个新鲜事物 - 我之前在任何教程中都没有看过它。作为参考,这是他如何做到的:

app.controller('InboxCtrl',
  function InboxCtrl ($scope, InboxFactory) {

  InboxFactory
    .getMessages()
    .then(function () {
      $scope.messages = InboxFactory.messages;
    });

});

app.factory('InboxFactory',
  function InboxFactory ($location, NotificationFactory) {

  InboxFactory.getMessages = function () {
    return $http.get('/messages')
    .success(function (data) {
      // magic line, we resolve the data IN the factory!
      InboxFactory.messages = data;
    });
  };

});

然而,我正在努力解决这个问题。我无法像他那样完全做到 - 在工厂中没有返回任何内容似乎每次调用InboxFactor.something时都会Cannot find property something of undefined错误。

这是我最好的尝试:

.factory( 'FormsOverviewFactory', function FormsOverviewFactory(apiForms) {
  FormsOverviewFactory.forms = []; 
  FormsOverviewFactory.asdf = function(){
    console.log("asdf",FormsOverviewFactory.forms);
  };  
  FormsOverviewFactory.getForms = function(){
          return apiForms
                  .forms()
                  .get()
                  .$promise.then(function (result){
                    FormsOverviewFactory.forms = result.data;
                    // THIS PRINTS THE CORRECT DATA
                    FormsOverviewFactory.asdf();
                  });
                };

  return{
    forms: FormsOverviewFactory.forms,
    asdf: FormsOverviewFactory.asdf,
    getForms: FormsOverviewFactory.getForms
  };
})

.controller( 'FormsOverviewCtrl', function FormsOverviewCtrl($scope, FormsOverviewFactory) {

  FormsOverviewFactory.getForms().then(function(){
    $scope.createdForms.forms = FormsOverviewFactory.forms;
    FormsOverviewFactory.asdf();
    // GIVES RIGHT STUFF
    console.log($scope.createdForms.forms);
    // GIVES []
  });

1 个答案:

答案 0 :(得分:2)

这可能是代码中的拼写错误。

根据上下文,作者的意图似乎是返回工厂功能本身 在您的情况下,这将意味着替换:

return {...}

使用:

return FormsOverviewFactory;

另请参阅此 short demo


在这种情况下,我想知道为什么不使用.service代替.factorythis.something而不是FormsOverviewFactory.something(并且不必返回任何内容 - 控制器&#39 ; s代码保持不变)?