我有一個用戶偏好工廠,用於保存用戶的偏好值。當頁面加載時它是空的。用戶登錄後會填寫用戶配置文件。 僞代碼角度:在工廠模型更新不反映在控制器
app.factory('pref', function($rootScope){
var pref = {}, age, name;
$rootScope.$on('logged.in', function(){
pref.name = 'sam';
pref.age = 30;
pref.currency = '$';
age = getAge(); name = getName();
})
function getName(){
//format name
return name;
}
function getAge(){
return age;
}
return {
currency: pref.currency,
age: age,
name: name
}
})
然後我注入在我的控制器廠:
app.controller('MainCtrl', function($scope, pref) {
$scope.name = pref.name; //Return undefined
var currency = pref.currency;
$scope.price = function(amount){
return amount + currency; //don't show $ sign
}
});
從PREF工廠返回值控制器不更新。我如何使它工作?
編輯:plunkr http://plnkr.co/edit/SKJC5hUPEm72JqGJyT9y
我沒有在你的代碼中看到logged.in解僱你能告訴在哪個位置你觸發事件 –
是我還是你從未設定過一個名字的價值?控制器中的pref.name調用getName(),它返回名稱,但名稱再次調用getName()? pref.name已設置,但這是一個不同的對象,不是您返回的對象。 – Narretz
@Ajaybeniwal這是一個psudo代碼。當登錄成功時,我的登錄服務會發出事件,並在此時設置'pref'對象中的值。直到那時pref是一個空的對象 – SamSerious