我与深化发展离子1 web应用程序和AngularJS 1.AngularJS - 从控制器更新工厂的可变
在我厂(UserFact):
.factory('UserFact', function() {
var user = [];
return {
'setUser': function(user) {
this.user = user;
console.log('(2) User set: ' + this.user);
console.log('(3) User id is now: ' + this.user.uid);
},
'updateSport': function(sportid, registered) {
console.log('Update sport: ' + sportid + ' --> ' + registered);
console.log('(4) For user uid: ' + this.user.uid);
var ref = firebase.database().ref('users/' + this.user.uid + '/sports/');
// sync down from server
var list = [];
ref.on('value', function(snap) { list = snap.val(); });
if(registered) {
list.splice(0, 0, {id: sportid});
} else {
}
ref.set(list);
}
};
})
在我的控制器:
function ($scope, $stateParams, $state, DatabaseFact, UserFact) {
// variables
$scope.sports = [];
$scope.sports = DatabaseFact.getSports();
// functions
$scope.updateSport = UserFact.updateSport;
// execution
firebase.auth().onAuthStateChanged(function(user) {
if (user) {
UserFact.setUser(user);
console.log('(1) Ctrl user uid: ' + user.uid);
}
});
}
根据控制台:日志(1),(2)和(3)显示用户ID形成我的分贝但(4)总是未定义...
有什么想法?
感谢
我想我明白了:将用户存储在$ scope中并将其从模板传递给控制器。但更全球化的是,我将工厂视为一种类(我更习惯于C++和Java),那么如果我无法在同一工厂的某个函数中访问它,那么在工厂中拥有变量的意义何在?谢谢! –
以上更新答案 – GPicazo
感谢GPicazo的澄清。我不明白为什么,但我的代码仍然无法正常工作。我不是很熟悉Factory/Service的这些概念,但不可能是因为在我实例化工厂的时候,用户成员是空的,那么我的函数返回给用户I的这个未定义的值永远不会更新,然后... –