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



我正在尝试在angular中创建一个用户工厂。出于某种原因,我可以在某些情况下访问工厂返回的值,但在其他情况下不能访问:比如:

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的每个地方进行更新。这可能吗?

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

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
  },
};

工厂也是单身汉,所以这里返回的东西只有一个实例。当将它注入多个控制器时,这很方便。

最新更新