这就是我打算让我的应用程序工作的方式:
单击按钮时,将发送 HTTP 请求以获取更多项目,并且返回的项目数组将附加到模型中的现有项目。
所以我将ng-click
按钮设置为一个表达式,在该表达式中调用一个函数来请求更多项目。
但它并没有像我预期的那样工作,第一次单击正确更新了模型,但 UI 中的项目列表没有反映更改。
我怀疑这是因为请求过程是异步的,所以我设置了以下实验:
HTML:
<div ng-app ng-controller="ItemController">
<ul>
<li ng-repeat="item in items">{{ item }}</li>
</ul>
<button ng-click="append()">Duplicate Items!</button>
</div>
JS(同步)
function ItemController($scope) {
$scope.items = [1, 2, 3];
$scope.append = function () {
$scope.items = $scope.items.concat($scope.items);
};
}
JS(异步)
function ItemController($scope) {
$scope.items = [1, 2];
$scope.append = function () {
setTimeout(function () {
$scope.items = $scope.items.concat($scope.items);
console.log($scope.items);
}, 500);
};
}
jsfiddle 链接
- 同步:http: //jsfiddle.net/zjVd6/
- 异步:http: //jsfiddle.net/aMMzQ/
事实证明,同步版本可以正常工作,而异步版本就像我的应用程序一样失败。
可能是什么原因?