変数スコープとその変数の値へのアクセスに関する奇妙な問題があります。Angular2スコープの問題
import { Component } from '@angular/core';
import { HTTP_PROVIDERS } from '@angular/http';
import { InputText, DataTable, Button, Dialog, Column, Header, Footer, Panel, ProgressBar, Dropdown, SelectItem,
SplitButton, SplitButtonItem, Toolbar, SelectButton, OverlayPanel, Checkbox,
ToggleButton } from 'primeng/primeng';
import { User } from './../users.models';
import { UsersService } from './../users.service';
import { Router, ActivatedRoute } from '@angular/router';
import { BbTile } from "./../../../shared/tile/tile.component";
import { BbTileModel } from "./../../../shared/tile/tile.model";
@Component({
templateUrl: 'app/pages/users/dashboard/index.html',
selector: 'brandbassador-app',
// Honestly I'm not sure if all of these are required here
directives: [(...), BbTile],
providers: [HTTP_PROVIDERS, UsersService]
})
export class UsersDashboardComponent {
// Data variables
tiles: BbTileModel[] = [];
// Statistics variables
totalRevenue: number;
usersCount: number;
averageEngagementRate: number;
totalReach: number;
ngOnInit() {
console.log("INIT ");
this.usersService.getUsers().then(
users => {
this.users = users;
this.usersCount = this.users.length;
this.getTotalRevenue();
this.getAverageEngagementRate();
this.getTotalReach();
this.getMostActive();
this.getTopPerformers();
this.initTiles(); //The function to call
});
//Alternative call place
}
initTiles() {
this.tiles.push(
new BbTileModel("USERS", (this.usersCount).toString()),
new BbTileModel("REVENUE", (this.totalRevenue).toString()),
new BbTileModel("AVERAGE ENGAGMENT RATE", (this.averageEngagementRate).toString()),
new BbTileModel("REACH", (this.totalReach).toString())
);
}
}
だから、これはちょうど私のコンポーネントの抜粋です:
は、私は基本的に、この(短いサンプル)の成分を持っています。私のInitTiles関数内からローカル変数にアクセスするのに問題があります。
基本的には、現在の場所(私はThe function to call
とコメントされています)で自分の関数呼び出しを呼び出すと、すべて正常に機能します。私はthis.usersService.getUsers().then(...)
の外側にその呼を移動する場合
しかし、私は、ローカルコンポーネントから値を読み出す全能力を失う(1 Alternative call place
としてコメント)。
どうしてですか?変数が関数のスコープ内で割り当てられているか、スコープに関するバックグラウンドで何か別の問題が起きているのでしょうか?
誰でもこの詳細を教えてください。
私のエラーは、データが実際には存在しないときにデータがそこにあることを期待していることです。私はそれが好きなものになると思った。だから私は '(...)'の後にTileModelを呼び出す/初期化する別の 'then()'を追加することができますか? –
あなたはそれを行うことができますが、あなたがすでに持っている '(...)'にコードを移動するだけで、別の '(...)'を追加するのは何ですか? –
OCDの種類以外の理由はありません:D –