Maison > Questions et réponses > le corps du texte
La page utilise ng-repeat pour générer des vues. Modification du modèle ng de ng-repeat dans le contrôleur. Pourquoi la vue n'est-elle pas modifiée ?
$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>
Lorsque $scope.tds est actualisé pour la première fois, la vue a changé. Mais lorsqu'une valeur est à nouveau attribuée à $scope.tds, la vue ne changera plus.
Mais si la longueur de $scope.tds change, la vue changera. Pourquoi ?
習慣沉默2017-05-15 16:56:09
Tout d'abord, je veux parler de deux problèmes de nommage dans le code :
"td in td"
Que diable, Angular peut réellement l'exécuter correctement. Il est recommandé de distinguer les deux noms, par exemple, les changer en td in tds
. a
et b
sont en effet nommés ainsi, mais lors de l'écriture de contrôleurs, faut-il toujours penser à ce qu'est a
? Oh, c'est $scope
. Pourquoi ne pas simplement le nommer $scope
. D’accord, sans plus tarder, répondons à vos questions. Au moment de a.td = []
, a.td
fait référence à un autre tableau, et le tableau d'origine n'a pas changé. Le tableau d'origine est lié au modèle. C'est en effet un écueil d'AngularJS, mais vous feriez mieux d'utiliser push
, pop
, splice
, etc. pour faire fonctionner les tableaux. Si vous souhaitez remplacer l'ensemble du tableau, il est recommandé. que tu le fasses comme ça :
javascript
a.td.splice(0, a.td.length, {tid:"111", created:"222"}, {tid:"333", created:"444"});
Pour un mécanisme de liaison de données plus détaillé et le processus de mise à jour d'AngularJS, veuillez vous référer à cet article :
http://harttle.github.io/2015/06/06/angular-data-binding-and-digest . ht...
習慣沉默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"}]; }; }]);
Essayez-le
http://plnkr.co/edit/6tNYE0boiI6CXdKtckpa?p=preview