2017-02-17 71 views
0

美好的一天,我正在努力理解为什么我无法在注销时将用户值设置为空值。我有一种方法用于设置用户信息,以便全局访问,并有一种get方法用于稍后获取用户信息,但现在无论用户数据保留在哪个用户登录中。在注销时删除一组用户信息

这是我目前服务控制器:

.factory('UserInfo', [function() { 
    var user; 
    return { 
     get: function(){ 
     return user; 
     }, 
     set: function(userInfo){ 
     user = userInfo; 
     }, 
     remove :function(){ 
     user = null; 
     return user; 
     } 
    }; 
    } 
]) 
.factory('Authentication',['UserInfo',function(UserInfo){ 
    return { 
    user: UserInfo.get() 
    }; 
}]); 

,我想呼叫的功能是在用户信息服务的删除功能。任何帮助将不胜感激。

回答

0

工厂是单身人士,创建的第一个实例会在您每次请求时都使用。所以,如果你做到以下几点:

.factory('Authentication',['UserInfo',function(UserInfo){ 
    return { 
     user: UserInfo.get() 
    }; 
}]); 
.controller('Blabla', ['Authentication', function(Authentication) { 
    var user = Authentication.user; 
}] 

您将设置用户等于什么UserInfo.get()在这一点上回报。因此,每当您拨打Authentication.user()它将返回相同的对象,无论UserInfo实际包含什么内容。

你可以通过传递函数来代替函数结果来解决这个问题。像这样:

.factory('Authentication',['UserInfo',function(UserInfo){ 
    return { 
     user: UserInfo.get 
    }; 
}]); 
.controller('Blabla', ['Authentication', function(Authentication) { 
    var user = Authentication.user(); 
}] 

通知如何()(括号)都走了上UserInfo.get,他们正在对Authentication.user()增加。

+0

一旦我删除**()**(括号),我绑定到我的离子视图的数据就消失了。有没有办法让角度接受删除功能的空值? –

+0

你调用** Authentication.user **的地方现在变成了** Authentication.user()**注意到添加的**()**(括号) –

+0

我已经更新了我的答案以包含此内容。 –