Javascript 角度工厂,如何彻底改变结果
我目前在Angular上工作,遇到了工厂和用户登录/注销的问题 下面是一个显示用例的示例: angular应用程序支持用户登录和注销,只要用户登录,就需要将用户的消息加载到MessageList(这是一个工厂)中。但首先,我设置了一个事件系统,在用户从应用程序登录或注销时触发加载/重置用户消息。以下是代码中的工厂:Javascript 角度工厂,如何彻底改变结果,javascript,angularjs,singleton,factory,Javascript,Angularjs,Singleton,Factory,我目前在Angular上工作,遇到了工厂和用户登录/注销的问题 下面是一个显示用例的示例: angular应用程序支持用户登录和注销,只要用户登录,就需要将用户的消息加载到MessageList(这是一个工厂)中。但首先,我设置了一个事件系统,在用户从应用程序登录或注销时触发加载/重置用户消息。以下是代码中的工厂: angular.module("Foo").factory("MessageList", MessageList); MessageList.$inject = ["User"];
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(...);
}
}
角度工厂是单例的,所以只执行一次。我已经注意到可以更新对象的某些属性(例如
\u messages.push
将根据MessageList
以角度分量正确返回包含新对象的消息列表)。但是替换整个对象似乎不起作用(每次触发onLogin
或onLogout
时,我需要完全重写消息对象)。您可以修改逻辑,如下所示:
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;
}
现在,用户详细信息将位于Factorys return对象的数据属性中。每次新用户登录时,您可以单独覆盖数据属性。您可以修改逻辑,如下所示:
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;
}
现在,用户详细信息将位于Factorys return对象的数据属性中。每次新用户登录时,您都可以单独覆盖数据
属性。您可能需要更改\u messages=$http(…)
到类似于$http(…)。然后(函数(结果){u messages=result})代码>哦,对不起,我写了一些东西来展示主要思想并传递那些样板代码,但是你在这里说明了一点!您可能想要更改\u messages=$http(…)
到类似于$http(…)。然后(函数(结果){u messages=result})代码>哦,对不起,我写了一些东西来展示主要思想并传递那些样板代码,但是你在这里说明了一点!