angulaire.js - angulaireJS ng-répétition
天蓬老师
天蓬老师 2017-05-15 16:54:09
0
2
573

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 ?

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

répondre à tous(2)
習慣沉默

Tout d'abord, je veux parler de deux problèmes de nommage dans le code :

  1. "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.
  2. 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 :

javascripta.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...

習慣沉默
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

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal