我创建了一个简单的工厂来存储来 self 的 authService 的值:
app.factory("subfactory",
function() {
var subValue = {};
return {
set: set,
get: get
};
function get() {
return subValue;
}
function set(value) {
subValue = value;
}
});
我在 authservice 中保存这样的值 - 这不是完整的服务,只是片段显示我使用 subfactory.set()
保存值的位置:
mgr.getUser().then(function (user) {
if (user) {
var idToken = user.id_token;
var dataIdToken = getDataFromToken(idToken);
subfactory.set(dataIdToken.sub);
} else {
//console.log("User not logged in");
}
});
但是当我尝试在 Controller 中读取对象时,它是空的:
vm.onGridLoad = function() {
var storedValue = subfactory.get();
console.log(storedValue);
最佳答案
我会用不同的方式编写工厂,但这只是我的想法。
app.factory("subfactory",
function() {
var service = {};
service.subValue = {};
service.save = save;
return service;
function save(value) {
service.subValue = value;
}
});
然后你将工厂注入(inject)到你需要的任何 Controller 中。 当您返回服务对象时,不需要 get 方法,只需使用 service.subValue 即可取回值。如果您不喜欢它,请随意将其更改为您的偏好。
该代码未经测试,但应该足以解决您的问题。
您没有指定您拥有哪种类型的 Angular 应用程序,它是不是水疗中心?初始保存后重新加载页面吗?如果您确实重新加载页面(例如导航到另一个页面),您的 JavaScript 将重新加载,并且您将丢失工厂中保存的状态。在这种情况下,您可以将您想要保留的任何内容存储在 localStorage 之类的地方。
关于javascript - AngularJS工厂不保留值(value),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46587014/