問題があり、これまでのところ、一見似ているように見えるSOの質問が機能するための解決策を得ることができませんでした。問題はこれです:
Trigger.ioのforge.ajaxを使用すると、データが返された後、Angular.jsビューが更新されません。これは、forge.ajaxが非同期関数であり、ビューがすでに表示された後にデータが返されるためだと思います。$ rootScope.apply()を使用してビューを更新しようとしましたが、これまでに見た多くの例に示されているように、機能しません。
以下のコントローラーコードを参照してください。
function OfferListCtrl($scope) {
$scope.offers = [];
$scope.fetchOffers = function(callback) {
$scope.offers = [];
var successCallback = function(odataResults) {
var rawJsonData = JSON.parse(odataResults);
var offers = rawJsonData.d;
callback(offers);
};
var errorCallback = function (error){
alert("Failure:" + error.message);
};
forge.request.ajax({
type: 'GET',
url: 'https://www.example.com/ApplicationData.svc/Offers',
accepts: 'application/json;odata=verbose',
username: 'username',
password: 'password',
success: successCallback,
error: errorCallback
});
};
$scope.fetchOffers(function(offers) {
$scope.offers = offers;
forge.logging.info($scope.offers);
});
}
そこにあるすべてのコードは正常に機能し、$scope.offersにはデータベースからのOfferデータが入力されます。ロギング機能は、データが正しい形式で正しいことを示します。
論理的な場所(および一部の非論理的な場所)で$ rootScope.apply()を使用しようとしましたが、ビューを更新できません。私がこれをどのように機能させることができるかについて何かアイデアがあれば、私はそれを大いに感謝します。
編集:HTMLを追加
HTMLは以下のとおりです。ng-click = "refresh()"のボタンに注意してください。これは単なる回避策であるため、少なくともデータを確認できます。これは、ビューを更新する$ rootScope.apply()を実行する1行の更新関数を呼び出します。
<div ng-controller="OfferListCtrl">
<h1>Offers</h1>
<ul>
<li ng-repeat="offer in offers">
<p>Description: {{offer.Description}}<br />
Id: {{offer.Id}}<br />
Created On: {{offer.CreatedOn}}<br />
Published: {{offer.Published}}<br />
</p>
</li>
</ul>
<input type="button" ng-click="refresh()" value="Refresh to show data" />
</div>