我目前正在研究Angular并遇到工厂和用户登录/注销问题。
以下是一个显示用例的示例:
角度应用程序支持用户登录和注销,只要用户登录,就需要将用户的消息加载到MessageList(这是工厂)中。首先,我设置了一个事件系统,以便在用户登录或从应用程序注销时触发加载/重置用户消息。这是代码中的工厂:
angular.module("Foo").factory("MessageList", MessageList);
MessageList.$inject = ["User"];
function MessageList(User) {
var _messages;
User.onLogin(activate); User.onLogout(function() { _messages = undefined; });
activate();
return _messages;
///
function activate() {
_messages = $http(...);
}
}
Angular工厂是单身,所以只执行一次。我已经注意到可以更新对象的某些属性(例如_messages.push
将使用角度组件中的新对象正确返回消息列表,具体取决于MessageList
)。但是替换整个对象似乎不起作用(每次触发onLogin
或onLogout
时,我都需要完全重写the _messages
对象。)
答案 0 :(得分:2)
你可以修改你的逻辑,如下所示:
angular.module("Foo").factory("MessageList", MessageList);
MessageList.$inject = ["User"];
function MessageList(User) {
var _messages;
User.onLogin(activate); User.onLogout(function() { _messages = undefined; });
function activate() {
_messages.data = $http(...);
}
var _messages = {
activate: activate
};
activate();
return _messages;
}
现在,用户详细信息将位于工厂返回对象的data
属性中。每次新用户登录时,您都可以单独覆盖data
属性。