2017-10-05 49 views
0

我创建了一个简单的工厂从我authService存储值:AngularJS工厂没有保留价值

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"); 
     } 
    }); 

但是当我尝试和控制器读取的对象出它是空的:

vm.onGridLoad = function() { 

     var storedValue = subfactory.get(); 

     console.log(storedValue); 

回答

1

我会写工厂以不同的方式,但是这只是我。

app.factory("subfactory", 
     function() { 

      var service = {}; 
      service.subValue = {}; 

      service.save = save; 

      return service; 

      function save(value) { 
       service.subValue = value; 
      } 
     }); 

然后你在任何你需要的控制器注入工厂。 在返回服务对象时,不需要get方法,只需使用service.subValue即可取回值。如果你不喜欢它,随时可以根据自己的喜好改变它。

该代码未经测试,但应足够接近以解决您的问题。

你没有指定你有什么样的角度应用程序,它是否是一个水疗中心?初次保存后是否重新加载页面?例如,如果您重新加载页面,例如导航到其他页面,则JavaScript将重新加载,并且您将丢失工厂中保存的状态。在这种情况下,您可以存储任何您想保留在localStorage之类的内容。

0

使用return您的服务

function get() 
{ 
return 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"); 
     } 
    }); 
}