我正在尝试在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
},
};
工厂也是单身汉,所以这里返回的东西只有一个实例。当将它注入多个控制器时,这很方便。