2016-12-04 13 views
0

コンポーネントのNg-repeatは、コントローラの$ http.thenから課金されたデータを表示できません。何が間違っているのですか? app.jsでAngularJS 1.5コンポーネントのコントローラでhttpメソッドからデータを管理する

サービス呼び出し残り方法:

<tr ng-repeat="channel in $ctrl.channels"> 
     <td>{{ channel.name }}</td> 
     <td>{{ channel.sport }}</td> 
(...) 

(と展開:ビュー内のデータを表示しようとしているcomponent.js

function channelListController(dataService){ 

this.channels = []; 
/** If i create var like this, this works, but i want load from http method: 
this.channels = [{id:1, name: "xxxxx", description: "xxxxxxx", sport: "xxxx"}]**/ 

dataService.loadData().then(function(d) { 

    console.log(d); //This console.log is showing DATA correctly! 
    this.channels = d; 
}); 

app.service('dataService', dataService); 

    function dataService ($http) { 

    return { 
    loadData: loadData 
    }   

    function loadData() { 

     var promise = $http.get("http://example.com/channels").then(function (response) { 

     res = response.data; 

     }); 
     return promise; 

    } 

データのロードhttp-server)

チャネルが表示されていません。 channelという名前のデータを持つvarを作成すると、channelListControllerのcatch http.methodの前にチャンネルが表示されますが、コントローラの ".then"にデータを書き込むと何も表示されません。トレースが.thenに入り、http getメソッドがデータを正しく受信していますが、データを 'channels' varにロードできません。

THANKS !!

+0

を修正する必要があります(つまり、(関数(d){this.channels = d;})。bind(this) ')。さもなければ、 'this.channels'はあなたが期待する' channels'変数を更新していません。 – miqid

+0

@miqidありがとう、それは働いている! –

答えて

0

参考までに間違っているようです。以下は、あなたがthen` `に渡し、コールバックの内側` this.channels`を使用して主張する場合、あなたは正しい変数を更新していることを確認するthis` `にその全体のコールバックをバインドする必要があり、それを

function channelListController(dataService){ 

var that = this; 
this.channels = []; 
/** If i create var like this, this works, but i want load from http method: 
this.channels = [{id:1, name: "xxxxx", description: "xxxxxxx", sport: "xxxx"}]**/ 

dataService.loadData().then(function(d) { 

    console.log(d); //This console.log is showing DATA correctly! 
    that.channels = d; // use that instead of this 
}); 
関連する問題