遇到问题,到目前为止无法为看似相似的 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() 的单行刷新函数,该函数确实更新了视图。
<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>