为什么我可以访问工厂直接返回的数据,而不是通过声明的对象?

时间:2015-02-06 03:29:37

标签: angularjs

我正在尝试以角度制作用户工厂。出于某种原因,我可以在某些情况下访问工厂返回的值,但在其他情况下则不能访问:像这样:

angular.module('app')
  .factory('UserFactory', function () {

    return {
      returnedPerson: returnedPerson,
      thing: thing,
      //This works
      person: {
        name: 'Test',
        age: 5
      },
    };

    //This doesn't work
    returnedPerson = {
      name: 'returnme',
      loggedIn: true
    }

    //Neither does this
    function thing () {
      return {
        name: 'test',
      }
    }

我不知道区别是什么,并且希望能够将该值作为对象访问,因为我希望UserFactory能够在我的应用中维护用户的数据。

换句话说,我打算将它注入几个不同的控制器,并希望能够在任何控制器中设置$ scope.loggedIn,并在每个使用UserFactory的地方进行更新。这可能吗?

1 个答案:

答案 0 :(得分:0)

你当然可以在工厂里做到这一点。但是,您只需在return语句之前移动对象和函数声明。返回后的任何内容都无法访问:

angular.module('app')
.factory('UserFactory', function () {
 var returnedPerson,
   thing;

//works now
returnedPerson = {
  name: 'returnme',
  loggedIn: true
};

//also works
thing = function () {
  return {
    name: 'test',
  }
};

return {
  returnedPerson: returnedPerson,
  thing: thing,
  //This works
  person: {
    name: 'Test',
    age: 5
  },
};

工厂也是单身人士,所以你只会有一个在这里返回的实例。将它注入多个控制器时很方便。