angular.js - angularJS ng-repeat
天蓬老师
天蓬老师 2017-05-15 16:54:09
0
2
536

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

天蓬老师
天蓬老师

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

모든 응답(2)
習慣沉默

우선, 코드에서 두 가지 이름 지정 문제에 대해 이야기하고 싶습니다.

  1. "td in td"대체 Angular는 실제로 이를 올바르게 실행할 수 있습니다. 두 이름을 구별하는 것이 좋습니다. 예를 들어 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의 함정
이지만 배열을 작동하려면 push, pop, splice 등을 사용하는 것이 좋습니다. 전체 어레이를 교체하려면 다음과 같이 하는 것이 좋습니다.

으아악 🎜AngularJS의 더 자세한 데이터 바인딩 메커니즘과 업데이트 프로세스는 다음 문서를 참조하세요: 🎜http://harttle.github.io/2015/06/06/angular-data-bound-and-digest.ht.. . 🎜
習慣沉默

으아악

사용해 보세요
http://plnkr.co/edit/6tNYE0boiI6CXdKtckpa?p=preview

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿