我正在尝试使用angular 2创建一个应用程序,我有一个从API获取数据的服务,这是我的代码:
import {Http} from "angular2/http";
import {Injectable} from 'angular2/core';
import "rxjs/add/operator/map";
declare var website : any;
declare var jQuery : any;
@Injectable()
export class categoryService{
private _url = website + "/api/category/list";
private category = [];
constructor (private _http : Http){
}
getCategory (){
return this._http.get(this._url)
.map(res => {
this.getEachInCategory(res.result); <==== i want impelement some changes in response
});
}
getEachInCategory(data){
jQuery.each(data, function(index, value) {
var test = [];
jQuery.each(value , function (index2 , value2) {
var obj = {};
obj["name"] = index2;
if(typeof value2["_props"] !== "undefined"){
obj["title"] = value2._props.title;
}
var subs = [];
jQuery.each(value2 , function (index3 , value3) {
var obj_subsub = {};
obj_subsub["name"] = index3;
if(typeof value3["_props"] !== "undefined"){
obj_subsub["title"] = value3._props.title;
}
subs.push(obj_subsub);
});
obj["items"] = subs;
test.push(obj);
});
var item = {};
item["name"] = index ;
item["items"] = test ;
item["title"] = value._props.title;
this.category.push(item);
}.bind(this));
}
}
但我有错误( angular2.dev.js:23925 EXCEPTION:TypeError:无法读取undefined的属性'length') 我想知道我的代码是真的吗?如果不是我怎么能创建一个函数来阻止一些响应的变化?
答案 0 :(得分:1)
您需要在地图回调函数中产生副作用,如下所述:
getCategory (){
return this._http.get(this._url)
.map(res => this.getEachInCategory(res.result));
}
getEachInCategory(data){
return something; // for example you can use here reduce method
}
答案 1 :(得分:0)
这里有几件事。
首先,您需要返回map
回调:
return this._http.get(this._url)
.map(res => {
return this.getEachInCategory(res.json());
});
然后你还需要在getEachInCategory
方法中返回:
getEachInCategory(data) {
var categories = [];
jQuery.each(data, (index, value) => {
var test = [];
jQuery.each(value , (index2 , value2) => {
var obj = {};
obj["name"] = index2;
if(typeof value2["_props"] !== "undefined") {
obj["title"] = value2._props.title;
}
var subs = [];
jQuery.each(value2 , (index3 , value3) => {
var obj_subsub = {};
obj_subsub["name"] = index3;
if(typeof value3["_props"] !== "undefined") {
obj_subsub["title"] = value3._props.title;
}
subs.push(obj_subsub);
});
obj["items"] = subs;
test.push(obj);
});
var item = {};
item["name"] = index ;
item["items"] = test ;
item["title"] = value._props.title;
categories.push(item);
});
return categories;
}