出現問題,目前爲止看不到任何類似SO問題的解決方案。問題是這樣的:Trigger.io + Angular.js並在調用forge.ajax後更新視圖
使用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被從數據庫提供的數據填充。日誌記錄功能顯示數據是正確的,格式正確。
我已經嘗試在邏輯位置(和一些不合邏輯的位置)使用$ rootScope.apply(),但無法獲取更新視圖。如果您有任何想法,我可以如何讓這個工作,我將不勝感激。
編輯:添加HTML
的HTML如下。用ng-click =「refresh()」記下按鈕。這只是一種解決方法,所以我至少可以看到數據。它調用一個執行$ rootScope.apply()的單行刷新函數,它會更新視圖。
<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>
是什麼視圖中的HTML是什麼樣子? – 2013-03-27 15:07:19
上面添加了HTML。這很簡單,當我點擊我添加的只調用一個只包含$ rootScope.apply()的函數的按鈕時,更新視圖。 – trentclowater 2013-03-28 02:54:39
感謝您使用HTML。我只是想確定沒有任何嵌套示波器讓你跳動。您是否嘗試在'forge.logging.info($ scope.offers)之後放置'$ scope。$ apply()';'?這應該工作。如果沒有,那麼我沒有任何其他想法。 – 2013-03-28 03:05:23