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

如何在服务中设置和获取值-angularjs,angularjs,Angularjs,我已经写了一个服务描述如下 myApp.service('dashboardPath', function(){ var path; return { path: path } this.path = function(value){ path = value; } }); 我正在设置会话Ctrl中的path值,如dashboardPath.path=“student_dashboard”,我可以

我已经写了一个服务描述如下

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


    var path;

      return {
        path: path
      }

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

});

我正在设置会话Ctrl中的path值,如dashboardPath.path=“student_dashboard”,我可以访问任何控制器中的path值,如dashboardPath.path,返回正确的值,但如果我重新加载页面,则path的值将消失(显示为“未定义”)。我的上述服务定义正确吗?

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


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

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

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

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

      };

      return {
        path: path
      }

});

这段代码看起来很奇怪:

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

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

});
  • return
    语句是不需要的,因为这样的函数是使用
    new
    操作符调用的。yoor代码应为:

    myApp.service('dashboardPath', function(){
    
        var path;
    
        this.path = path;
    
    });
    
  • 您需要实际存储该值。通过将其放在一个变量中,当您刷新时,上下文将被重置,并且您仍然会得到您所说的未定义的
    。您应该将其存储在以下三个位置之一:

    • 服务器端:使用ajax($http)来
      获取
      发布
    • 客户端本地存储-
    • 饼干
    在任何这样的地方,您都需要为这些值设置setter和getter:

    this.getPath = function(){ ... };
    this.setPath = function(v){ ... };
    
    而不是普通成员变量
    path


  • 据我所知,如果你刷新你的页面,这个值没有定义是完全正常的,你需要使用的是你是否再次下载JS来重新加载?如果是这样,则该值未定义是完全正常的。如果你想通过重新加载来保存一些东西,你应该使用浏览器存储。或者更好的是使用本机angular服务,这给我留下了另一个问题。我需要的是,当用户登录时,我会根据某些条件决定仪表板路径。我正在尝试使用服务设置路径,现在我还有一个链接可以将用户带到仪表板,我可以从服务获取路径,并且已经说过在重新加载页面时会清除该值,所以现在当用户单击仪表板链接时,我没有正确的路径。对于这种情况,localStorage是唯一的解决方案吗?或者angularjs提供了其他技术来实现这一点吗?您也可以使用cookies来持久化数据(ng cookies)