我與深化發展離子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的這個未定義的值永遠不會更新,然後... –