2017-10-09 4 views
1

In this Plunk、私はAngular.ioチュートリアルを少し変更しました。角度サービスが参照されていても呼び出されていないのに、正しい値を返しています

私はheroes.serviceにdoHeroesExistという名前の関数を追加しました。 しかし、私は決してそれを呼びません。私はそれを行う唯一のものはapp.component

ngOnInit(): void { 
    //this.getHeroes(); 
    this.heroesExist = this.heroService.doHeroesExist; 
    console.log("app ngOnInit called...", this.heroesExist); // outputs: app ngOnInit called... true 
    } 

で変数に割り当てそしてここhero.service.tsファイル内doHeroesExist機能です。

doHeroesExist(): boolean { 
    console.log("doHeroesExist called..", this.doHeroesExist); 
    return this.doHeroesExist; 
    } 

私は困惑しています。

なぜコンソールログにと表示されますか?関数の本体を文字列として出力するべきではありませんか?また、doHeroesExistのconsole.logは決して印刷されません。

答えて

1

EDIT:

あなたはあなたのサービスで定義されていることを持っていたことを言及するのを忘れてしまった:

doHeroesExist: boolean; 

    constructor() { 
    this.doHeroesExist = true; 
    } 

なく、同じ名前を持つメンバー・メソッドとメンバーフィールドを持っていることは良い考え...

doHeroesExistの定義は(関数、その他の変数...)でしたが、コンストラクタではtrueの値を代入するだけです。したがって、値truebooleanになります。

これだけです。私はそれが名前の衝突のためにコンパイルされて驚いていますが、いずれにせよその動作はあなたのコンストラクタによって明らかに引き起こされます。

+0

ご回答いただきありがとうございました。私は実際に私の質問に嫌われたことを今や認識しています。私はいくつかの変更を加えて、ここでそれを再度尋ねました:https://stackoverflow.com/questions/46657227/angular-giving-a-component-field-a-reference-to-a-service-function-and-calling – CodyBugstein

関連する問題