検索

ホームページ  >  に質問  >  本文

angular.js - angularJS ng-repeat

页面使用了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又会变了,这是为什么呢?

天蓬老师天蓬老师2744日前540

全員に返信(2)返信します

  • 習慣沉默

    習慣沉默2017-05-15 16:56:09

    まず最初に、コード内の 2 つの 命名の問題についてお話したいと思います。

    1. "td in td"なんと、Angular は実際に正しく実行できます。 2 つの名前を区別することをお勧めします。たとえば、td in tds に変更します。
    2. "td in td"是什么鬼,Angular居然也可以正确地执行。建议区别这两个名称,比如改成td in tds
    3. ab这样命名确实可以,不过写控制器时是不是经常要想一想a是什么?哦,是$scope。为何不直接命名为$scope

    好了不啰嗦了,回答你的问题。在a.td = []的时候,a.td引用了另外一个数组,原有数组并未改变。而模板中绑定的是原有数组。这确实是AngularJS的一个坑,但你最好用pushpopsplice このように ab に名前を付けるのは問題ありませんが、コントローラーを作成するときは、a が何であるかを常に考える必要がありますか?ああ、$scope です。 $scope という名前を付けてみてはいかがでしょうか。

  • それでは、さっそく質問に答えていきましょう。 a.td = [] の場合、a.td は別の配列を参照し、元の配列は変更されません。元の配列はテンプレートにバインドされています。

    これは確かに AngularJS の落とし穴です
    が、配列を操作するには pushpopsplice などを使用した方がよいでしょう。配列全体を置き換えたい場合は、次のようにすることをお勧めします:

    リーリー 🎜AngularJS のデータ バインディング メカニズムと更新プロセスの詳細については、次の記事を参照してください: 🎜http://harttle.github.io/2015/06/06/angular-data-binding-and-digest.ht.. 🎜

    返事
    0
  • 習慣沉默

    習慣沉默2017-05-15 16:56:09

    リーリー

    試してみる
    http://plnkr.co/edit/6tNYE0boiI6CXdKtckpa?p=preview

    返事
    0
  • キャンセル返事