私は角度4を学習しており、クラスメソッドを取得する方法を理解できません。サービスによって実装されたときに、角度クラスメソッドが機能しない
私はこの機能のクラスを持っています。これには、Google Charts JSONデータテーブルを構築するためのいくつかのメソッドが含まれています。
export class Feature {
id: string;
name: string;
get cols() {
return [
{'id': '', 'label': 'id', 'type': 'string'},
{'id': '', 'label': 'name', 'type': 'string'}
];
}
get row() {
console.log('foo');
return {'c': [ {'v': this.id}, {'v': this.name} ] };
}
}
私はRESTのAPIから機能を移入するサービスがあります。
import { Injectable } from '@angular/core';
import { Headers, Http } from '@angular/http';
import 'rxjs/add/operator/toPromise';
import { Feature } from './feature';
@Injectable()
export class FeatureService {
private featureUrl = 'http://raspi/rest/api';
constructor(private http: Http) { }
getFeatures(): Promise<Feature[]> {
return this.http.get(this.featureUrl + '/getFeatures')
.toPromise()
.then(response => response.json().results as Feature[])
.catch(this.handleError);
}
private handleError(error: any): Promise<any> {
console.error('An error occurred', error); // for demo purposes only
return Promise.reject(error.message || error);
}
}
はその後、私のコンポーネントでは、INITに、私はサービスを呼び出し、とGoogleにインスタンスの配列を変換しようデータテーブル:
import { Component, OnInit } from '@angular/core';
import { Feature } from '../feature';
import { FeatureService } from '../feature.service';
@Component({
selector: 'app-features',
templateUrl: './features.component.html',
styleUrls: ['./features.component.css']
})
export class FeaturesComponent implements OnInit {
features: Feature[];
public tableData = {
chartType: 'Table',
dataTable: {},
options: {'title': 'Tasks'},
};
constructor(
private featureService: FeatureService
) { }
private features2dataTable(features: Feature[]) {
const data = {
'cols': [],
'rows': []
}
features.forEach(function(feature) {
console.log(feature);
data.cols = feature.cols;
data.rows.push(feature.row);
});
console.log(data);
return data;
}
getFeatures(): void {
this.featureService
.getFeatures()
.then(features => this.tableData.dataTable = this.features2dataTable(features))
}
ngOnInit(): void {
this.getFeatures();
}
}
私はDataTableのは、この形式を持つようにしたい:
{
"cols": [
{"id":"","label":"Topping","pattern":"","type":"string"},
{"id":"","label":"Slices","pattern":"","type":"number"}
],
"rows": [
{"c":[{"v":"Mushrooms","f":null},{"v":3,"f":null}]},
{"c":[{"v":"Onions","f":null},{"v":1,"f":null}]},
{"c":[{"v":"Olives","f":null},{"v":1,"f":null}]},
{"c":[{"v":"Zucchini","f":null},{"v":1,"f":null}]},
{"c":[{"v":"Pepperoni","f":null},{"v":2,"f":null}]}
]
}
が、私はfeature.rowまたはfeature.colsを使用するとき、私は「ID」と、インスタンスの「名前」フィールドが移入されていても、バック未定義の取得:
{id: "BP01", name: "BP feature one"}
id: "BP01"
name: "BP feature one"
__proto__: Object
features.component.ts:30
{id: "BP02", name: "BP feature two"}
id: "BP02"
name: "BP feature two"
__proto__: Object
features.component.ts:34
{cols: undefined, rows: Array(2)}
cols: undefined
rows: (2) [undefined, undefined]
__proto__: Object
なぜ得ることはありません方法の仕事?
なぜあなたは同じ行にこれをやっているが、 'this.tableData.dataTable = this.features2dataTable(機能)それを分離'。 –
あなたが受け取っているレスポンスが期待しているクラス定義に合っていない可能性がありますか? console.log(response.json())の結果はどうですか? –
「id」フィールドと「name」フィールドに正しく入力されています。これは、私のfeatures.forEachループ内でconsole.log(機能)を実行すると表示されました。問題は、各フィーチャには「id」フィールドと「name」フィールドしかなく、クラスで定義されている「行」または「cols」メソッドがないことです。 AJT_82問題を識別しました。私はFeatureオブジェクトの代わりにPOJOをループしていました。 –