0

ビューで表示する変数のように更新コントローラをバインドすることができません:AngularJS

<div ng-controller="MainPageController as mpc"> 
    <h1>{{mpc.city}}</h1> 
</div> 

はコントローラー:

app.controller('MainPageController',['GetCityService', function(GetCityService){ 
    this.city = null; 
    this.getCityService = GetCityService; 
    this.getCityService.getCity().success(function(data){ 
     this.city = data.city 
     console.log(this.city); // Prints the city correctly. 
    }); 
}]); 

私は、コントローラからの値にアクセスするための方法「として、コントローラ」を使用しようとしています。私のサービスはコントローラ変数 "this.city"に割り当てられている都市名を正しく返します。しかし、私はビューの値をバインドすることができません "(私はビューに表示されない何も表示されません)

私はそれが間違っていると教えてください PS:私は$スコープを使用しようと、私はコントローラ変数をバインドできない理由を理解できません "と、可能ならば$ scopeとこの変数を使用するべきであると示唆します。事前に

感謝:)

+1

試してみましょう: '' MainPageController '、[' GetCityService '、function(GetCityService){var vm = this; ... '、' vm。...'を使ってすべてのアクション/変数を実行してください。 – developer033

+0

どうもありがとうございました。ありがとうございます@ developer033。「this」を変数に代入し、毎回「this」を使って違いを説明してください。 – Jarvis

答えて

0

元の質問が回答されているので、私は答えを説明しようとするでしょう。それはジャバスクリプトの 'this'を理解するだけの問題です。

コントローラ機能内では、「this」はコントローラ自体を指します。あなたの成功コールバックでは、これはもはやコントローラを指していません(厳密なモードでないなら、私はウィンドウを推測していますか?)。

'これ'を 'vm'のような変数に保存すると、あなたがコントローラを参照していることがわかります。

これらの機能がすべて1.5になったので、$ scopeをもう使用しないで、いつも 'controllerAs'を使用することをお勧めします。また、スタンドアロンコントローラを使用する代わりにコンポーネントに移行することをお勧めします。

+0

ありがとうございます。 – Jarvis