【发布时间】:2013-06-25 10:16:51
【问题描述】:
我有一个保存用户偏好值的用户偏好工厂。当页面加载时它是空的。用户登录后,将填写用户个人资料。 伪代码
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
}
});
预设工厂的返回值未在控制器中更新。如何让它发挥作用?
【问题讨论】:
-
我没有在你的代码中看到logged.in你能告诉你在哪个位置触发事件
-
是我还是你从来没有为名称设置值?控制器中的 pref.name 调用 getName() 返回 name,但 name 然后再次调用 getName()? pref.name 已设置,但这是一个不同的对象,而不是您返回的对象。
-
@Ajaybeniwal 这是一个伪代码。当成功登录时,我的登录服务会发出事件,此时
pref对象中的值已设置。在此之前 pref 是一个空对象 -
你能发布一个显示问题的 JSFiddle 或 Plunker 吗?可能存在许多问题,并且发布与您遇到的问题不同的代码并不能真正帮助任何人调试它。
-
@rtcherry 添加了一个 plunker 来说明问题
标签: javascript angularjs