服务变量分配了数据,但访问时始终未定义

时间:2016-04-26 17:07:20

标签: javascript angularjs

如果我的问题有点问题,我仍然很有兴趣,很抱歉... 我创建了一个调用一些REST API的服务,我用promises实现了它。

我目前正在将此承诺返回到控制器的数据列表并将其放入$scope

我希望当我在此函数中接收数据时,还将已检索的数据存储到服务中,因此如果我已有数据,则不必再次调用服务。

app.service("MyService", function ($http, $q) {
 this.OrignalDataFromService = null;
 return {
    var deferred = $q.defer();
    ...
    deferred.resolve(data);
    this.OrignalDataFromService = data;
    return deferred.promise;
  }
}

问题在于,当我从控制器访问OrignalDataFromService时,它总是undefined(在承诺中我得到数据它只是未定义的服务变量)为什么会这样?
我真的不明白模型在角应用程序中应该放在哪里。
控制器和服务中的$scope变量是否允许我们从某处获取数据,或者模型应该在服务中(作为变量)?

2 个答案:

答案 0 :(得分:3)

OrignalDataFromService 是服务的私有变量,因此如果您想要访问它,则需要在对象中返回

check this

示例:

 app.service("MyService", function ($http, $q) {
 this.OrignalDataFromService = null;
 return {
    originalData: this.OrignalDataFromService
  }
}

答案 1 :(得分:1)

看看小提琴手here。您必须公开保存原始数据的变量。

<强>服务

myApp.service('myService', function($q) {
  return {
    OrignalDataFromService: null,
    getData: function() {
      var deferred = $q.defer();
      var data = ["Data-1", "Data-2", "Data-3"]
      deferred.resolve(data);
      this.OrignalDataFromService = data;
      return deferred.promise;
    }
  }
});