尝试从服务中存储和访问JSON

时间:2014-01-14 04:27:15

标签: angularjs angular-http

我对Angular相对较新,并试图纠正一些人离开我们的功能。我有一个从另一个服务检索JSON的服务,然后我想在原始服务中使用该JSON。当从返回的JSON访问单个值时,我有它工作,但我想存储整个对象,以便我可以轻松地引用它。

例如,这是有效的,并将title(title:cfgTitle)的值设置为从JSON返回的TITLE值:

.service("rtmModel", function($q, dataGetter, $http) {
    this.getModel = function() {
        var cfgProm = dataGetter.getData()
        var cfgTitle = cfgProm.then(function(response) {
            return response.data.record1.TITLE;
        });
        return {
            title: cfgTitle,
            desc: 
            ...

但是,如果我从“then”函数返回任何其他内容,我就无法显示内容。例如,这不起作用(似乎为标题参数传递未定义):

.service("rtmModel", function($q, dataGetter, $http) {
    this.getModel = function() {
        var cfgProm = dataGetter.getData()
        var cfgTitle = cfgProm.then(function(response) {
            return response.data.record1;
        });
        return {
            title: cfgTitle.TITLE,
            desc: 
            ...

如果我只是从“then”函数返回“response”并执行:

         return {
        title: cfgTitle.

然后我将整个JSON字符串传递给Title(我理解为什么),但是尝试向下钻取(即标题:cfgTitle.data或title:cfgTitle.data.record1)只会导致未定义的值。

我已经尝试了各种存储返回JSON数据的方法,但找不到允许我存储JSON对象的秘密酱,然后使用它来传递下面的多个参数(即我想通过一个值到标题,另一个到desc,等等)。

任何指针都会受到赞赏。

1 个答案:

答案 0 :(得分:0)

您不能从传递给promise的.then方法的匿名函数回调中返回值/对象。这些回调由promise库在内部调用,并且忽略返回值。你有两个选择。从getModel引用对新对象的引用,并将getData中的数据返回复制到其中。或者,从getModel方法返回一个新的promise,并在解析从getData返回的promise时解析该promise。

后面的选项(向调用者返回一个promise)看起来像这样(不会编译):

.service("rtmModel", function($q, dataGetter, $http) {
this.getModel = function() {
    var defer = $q.defer();
    dataGetter.getData().then(function(response) {
        defer.resolve(response.data.record1);
    });
    return defer.promise;