如何在服务中设置和获取值 - angularjs

时间:2014-09-17 17:14:06

标签: angularjs

我已经写了下面描述的服务

myApp.service('dashboardPath', function(){


    var path;

      return {
        path: path
      }

      this.path = function(value){
        path = value;
      }

});

在sessionsCtrl中设置路径的值,如此dashboardPath.path =“student_dashboard”,我可以访问任何控制器中的路径值,例如dashboardPath.path,它返回正确的值,但是如果我重新加载页面,路径的值消失了(它表示“未定义”)。我的上述服务是否正确定义?

3 个答案:

答案 0 :(得分:2)

当您刷新页面时,该值将消失,因为应用程序重新加载。您需要的是数据的持久性:

myApp.service('dashboardPath', function(){

    var path = JSON.parse(localStorage.getItem('path'));
    this.path = function(value){
        path = value;
        localStorage.setItem("path", path);

      };

      return {
        path: path
      }

});

答案 1 :(得分:0)

服务是单个对象,将在您的应用程序期间生效。刷新页面会重新加载所有代码并丢弃旧内存。您的代码工作正常。

如果要在页面刷新之间保留数据,请尝试使用localStorage

答案 2 :(得分:0)

这段代码看起来很奇怪:

myApp.service('dashboardPath', function(){

    var path;
    return {
        path: path
    }
    this.path = function(value){
        path = value;
    }

});
    由于使用return运算符调用此类函数,因此不需要
  1. new个句子。你的代码应该是:

    myApp.service('dashboardPath', function(){
    
        var path;
    
        this.path = path;
    
    });
    
  2. 您需要 - 实际存储值。通过将其放在一个变量中,刷新时将重置上下文,您仍然可以得到undefined。您应该将其存储在以下三个位置之一:

    • 服务器端:使用ajax($ http)到getpost值。
    • 客户端LocalStorage - See @bto.rdz's comment
    • 饼干

    在任何这样的地方,你需要有一个setter和getter来获取这些值:

    this.getPath = function(){ ... };
    this.setPath = function(v){ ... };
    

    而不是普通成员变量path