頁面使用了ng-repeat產生了view。在controller裡修改了ng-repeat的ng-model。 view沒有修改是什麼麼?
$scope.search = function(page){
$scope.orData.page = page==0?1:page;
$scope.$watch("orData", function(){
orderService.searchData($scope.orData).then(function(res){
$scope.res = res.data;
if ($scope.res != undefined) {
if ($scope.res.page_items.length == 0) {
alert("没有订单数据");
}else{
$scope.tds = $scope.res.page_items;
$timeout(function(){
console.log($scope.tds);
}, 1000);
};
}else{
$scope.tds = "";
$("#orPaging").empty();
alert("订单号不能为非数字");
};
});
});
};
//
<tbody>
<tr ng-repeat="td in tds"><!-- -->
<td>{{td.tid}}</td>
<td>{{td.created}}</td>
<td>{{td.buyer_nick}}</td>
<td>{{td.payment}}</td>
<td>{{td.shop_name}}</td>
<td>{{td.title}}</td>
<td>{{td.seller_memo}}</td>
<td>{{td.shipping_type}}</td>
<td>{{td.status}}</td>
<td>{{td.receiver_name}}</td>
<td><button type="button" class="btn btn-primary btn-sm" data-tid="{{td.tid}}" ng-click="detail($event)">查看</button></td>
</tr>
</tbody>
第一次刷新$scope.tds,view是有改變的。但再一次給$scope.tds賦值,view就不再改變了。
但如果$scope.tds的長度有變,view又會變了,這是為什麼呢?
習慣沉默2017-05-15 16:56:09
首先我要說程式碼中的兩個命名問題:
"td in td"
是什么鬼,Angular居然也可以正确地执行。建议区别这两个名称,比如改成td in tds
。 a
和b
这样命名确实可以,不过写控制器时是不是经常要想一想a
是什么?哦,是$scope
。为何不直接命名为$scope
。 好了不囉嗦了,回答你的問題。在a.td = []
的時候,a.td
引用了另一個數組,原有數組並未改變。而模板中綁定的是原有數組。 a.td = []
的时候,a.td
引用了另外一个数组,原有数组并未改变。而模板中绑定的是原有数组。这确实是AngularJS的一个坑,但你最好用push
、pop
、splice
這確實是AngularJS的一個坑
push
、pop
、splice
等來操作數組,如果你要替換整個數組,建議你這樣搞:
javascript
a.td.splice(0, a.td.length, {tid:"111", created:"222"}, {tid:"333", created:"444"});
習慣沉默2017-05-15 16:56:09
javascript
<body ng-app="scopeExample"> <p ng-controller="MyController"> <p> <table> <tr ng-repeat="td in tds"> <td>{{td.tid}}</td> <td>{{td.created}}</td> <td><button type="button" class="btn btn-primary btn-sm" data-tid="{{td.tid}}" ng-click="detail($event)">查看</button></td> </tr> </table> <button ng-click="change()">button</button> </p> </p> </body> sdApp.controller('MyController', ['$scope', function($scope) { $scope.change = function(){ $scope.tds = [{tid:"321", created:"456"}, {tid:"abc", created:"def"}]; }; }]);
試試看
http://plnkr.co/edit/6tNYE0boiI6CXdKtckpa?p=preview