私は正常に動作しないような角度2のサービスを持っています。なんらかの理由でのスコープはであると私は予想していません。私は太い矢印を使用しています。これは物事を正確に維持するはずですが、車輪がどこから落ちているのか分かりません。角2サービスのシングルトンスコープの問題
サービス
declare const Trello: any;
import { Injectable } from '@angular/core';
import { Http, Response } from '@angular/http';
@Injectable()
export class TrelloService {
key: string = 'test';
token: string = 'test';
boards: any = [];
constructor(private http: Http) {
console.log('Initializing TrelloService. You should only see me once.');
}
getOpenBoards(): Promise<void> {
// 'this' is null here. No scope at all???
const url = `https://api.trello.com/1/member/me/boards?key=${this.key}&token=${this.token}`;
return this.http.get(url)
.toPromise()
.then((response: Response) => {
debugger;
this.boards = response.json();
});
}
}
以下のコンポーネントがサービスにgetOpenBoards
を呼び出します。その場合、this
はnullです。これは "クレイジーなjavascriptのスコープの問題"を叫ぶが、私はそれをどうすればいいかわからない。どこでもbind
する必要がありますか?もしそうなら、私はどのようにコンポーネントからそれを行うでしょうか?
コンポーネント
import { Component } from '@angular/core';
import { Router } from '@angular/router';
import { CatchflyService } from '../../services/catchfly.service';
import { TrelloService } from '../../services/trello.service';
declare var Trello: any;
@Component({
selector: 'step-fetch-data',
templateUrl: './fetchData.component.html',
styleUrls: ['./fetchData.component.scss']
})
export class FetchDataComponent {
showError: boolean = false;
constructor(private trelloService: TrelloService,
private catchflyService: CatchflyService,
private router: Router) {
this.catchflyService.getProjects()
.then(this.trelloService.getOpenBoards)
.then(this.trelloService.getAllLists)
.then(() => {
console.log('finished getting projects, boards, and lists');
})
.catch((err) => {
console.log(err);
console.log('service rejected');
});
}
}
私はあなたに関連する最終的なメモを追加しました。あなたが編集の通知を受け取ったかどうか分からないので、うまくいけば、このコメントはそのトリックを行います。 – Robba
ノートをありがとう。ええ、彼らはデザインによって連載されています。私はこの質問に出くわす他の人たちがあなたの徹底的な答えを私が持っているものと同じくらい有用だと思っています –