2017-05-19 12 views
0

$ resource.queryを使用してバックエンドからデータを取得しています。それは働いている。しかし、私は応答を得た後、ビューは変更されません。関数内にないときに機能します。

この

が、これは私のコントローラ

app.controller('myController', ['$scope', '$resource', 'myService', 
function ($scope, $resource, myService) { 

//this call update the view 
myService.fetchData('1234', '111111') 
    .then(function (data) { 
    $scope.data = data 
    }) 
    .catch(function (erro) { 
    console.log(erro); 
    }); 

//this is called in a button click and doesn't change the view 
$scope.getData = function() { 
    myService.fetchData('1234', '111111') 
    .then(function (data) { 
     $scope.data = data 
    }) 
    .catch(function (erro) { 
     console.log(erro); 
    }); 
} 
}]); 

である私のサービス

app.factory('myService', function ($q, $resource, $http) { 
    var service = {}; 
service .pesquisar = function (param1, param2) { 
return $q(function (resolve, reject) { 
    $resource(urlWebService + '/API/', null).query({ 
    param1: param1, 
    param2: param2 
    }, function (dados) { 
    resolve(dados); 
    }, function (erro) { 
    reject(erro); 
    }); 
}); 
}; 
return service ; 
}); 

であり、これは、あなたが追加しているgetData()が呼び出されると仮定すると、私の見解

<table> 
    <thead> 
    <tr> 
     <th>Field</th> 
    </tr> 
    </thead> 
    <tbody> 
     <tr ng-repeat="d in data"> 
     <td>{{d.field}}</td> 
     </tr> 
    </tbody> 
</table> 

答えて

1

です変数testeが定義されていない場合は、の代わりに

$scope.getData = function() { 
    myService.fetchData('1234', '111111') 
    .then(function (data) { 
     //teste.data = data 
     $scope.data = data; //will bind the result to the view 
    }) 
    .catch(function (erro) { 
     console.log(erro); 
    }); 
} 
}]); 
+0

<tr ng-repeat="d in data.data"> 

またはあなたのコントローラに変更する迅速な返信いただきありがとうございます。私はあなたが言ったことをやっても、まだ動作しません..私はこれがとても難しいとは思わない、私はおそらく何かが不足していると思う... – JonathanMRibeiro

+0

全体のコードを追加しようとすると、 getData() – Karim

+0

私はui-routerを入れ子にしたビューで使用しています.ng-clickでボタンを取得してgetData()を呼び出し、別のビューでng-repeatを呼び出します。私はネストされたビューが同じコントローラを共有していると思ったが、同じビューにボタンを置いた後、私は気づいていない...問題は解決した。 – JonathanMRibeiro

0

あなたの第二の非作業バージョンは何も返さない関数に$scope.getDataに等しいです。

+0

返すべきものはありますか?私はこのアプローチにちょっと新しいので、間違っているかもしれません。 – JonathanMRibeiro

+0

あなたがリクエストから得た応答が必要だと思いますので、2番目の方法はこれをやっている方法ではありません。この種の関数代入は、イベントにバインドするときに使用されるためです。解決済みの約束が必要なので、最初のアプローチは正しいものです。 – neptune

0

約束の結果はあなたの結果変数の「データ」に格納されているので、あなたのビューは

$scope.data = data.data; 
関連する問題