我对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,等等)。
任何指针都会受到赞赏。
答案 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;