簡體   English   中英

Angular.js順序不正常

[英]Angularjs order by not working properly

我面對訂單方面的一個小問題,我無法理解。
當我整理數組時,我可以看到每件事都運行良好,但是問題出在列表的ng-click函數中。
例如,如果我有這個數組:

$scope.ticketsEncour = [
  {_id: 1, vendeur: 'John Doe', date_ticket: '18:52', total: 50},
  {_id: 2, vendeur: 'Foo Bar', date_ticket: '12:12', total: 20},
  {_id: 3, vendeur: 'John Smith', date_ticket: '11:02', total: 10},
  {_id: 4, vendeur: 'Test Test', date_ticket: '05:10', total: 6000}
]

這是其整理和點擊功能:

$scope.reverse = false;
$scope.orderItems = function (item) {
$scope.reverse = !$scope.reverse;
  if (item != undefined) {
    if (item == $scope.orderItem) {
      $scope.orderType = $scope.orderType == '+' ? '-' : '+';
    }
    else {
      $scope.orderItem = item;
      $scope.orderType = '+';
    }
  }

  $('.iconOrder').removeClass('up').removeClass('down');
  if ($scope.orderType == '+') {
    $('.iconOrder[name="' + $scope.orderItem + '"]').addClass('down')
  }
  else {
    $('.iconOrder[name="' + $scope.orderItem + '"]').addClass('up')
  }

  return $scope.orderType + $scope.orderItem;
}
$scope.goToCaissePage = function (id) {
  id = id.replace("app/caisse/", "");
  console.log(id);
};

還有我的HTML代碼

<ion-list class="list articlesList swipedList" show-delete="showDelete">
      <ion-item class="item item-button-right stable-bg">
        <span class="row">
          <span class="col col-20" ng-click="orderItems('vendeur')">
            <strong>Vendeur</strong>
            <div class="iconOrder" name="vendeur">
              <i class="icon ion-android-arrow-dropup"></i>
              <i class="icon ion-android-arrow-dropdown"></i>
            </div>
          </span>
          <span class="col col-20" ng-click="orderItems('date_ticket')">
            <strong>Heure</strong>
            <div class="iconOrder" name="date_ticket">
              <i class="icon ion-android-arrow-dropup"></i>
              <i class="icon ion-android-arrow-dropdown"></i>
            </div>
          </span>
          <span class="col col-10" ng-click="orderItems('total')">
            <strong>Total</strong>
            <div class="iconOrder" name="total">
              <i class="icon ion-android-arrow-dropup"></i>
              <i class="icon ion-android-arrow-dropdown"></i>
            </div>
          </span>
        </span>
      </ion-item>


      <ion-item class="item item-button-right pad-item" ng-repeat="ticket in ticketsEncour | orderBy : orderBy : orderItem:reverse  track by $index">
        <span class="row">
          <span class="col col-20 col-pad" ng-click="goToCaissePage('app/caisse/{{ticket._id}}')">
            <div>
              <a href="" style="color: #333; text-decoration: none">{{ ticket.vendeur }}</a>
            </div>
          </span>
          <span class="col col-20 col-pad" ng-click="goToCaissePage('app/caisse/{{ticket._id}}')">
            <div>
              <a href="" style="color: #333; text-decoration: none">{{ ticket.date_ticket | date:'HH:mm' }}</a>
            </div>
          </span>
          <span class="col col-10 col-pad" ng-click="goToCaissePage('app/caisse/{{ticket._id}}')">
            <div>
              <a href="" style="color: #333; text-decoration: none">{{ ticket.total.toFixed(2) }}€</a>
            </div>
          </span>
        </span>
      </ion-item>
    </ion-list>

當我單擊ng-repeat的任何項目時,它將在控制台中顯示正確的ID。 但是當我使用重新排序時,我可以的是HTML發生了變化,但是ng-click函數始終呈現舊的:

單擊索引0 =>控制台1(完美)
用任何類型的東西整理后:
單擊索引0 =>控制台1(例如,預期為3)

謝謝

更新:更改了陣列名稱(復制剪切錯誤)
更新為@Weijian建議

我建議使用直接使用范圍變量的orderBy。 這也是有角度的文檔建議的方法。

JS

$scope.reverse = false;
$scope.orderItems = function (item) {
    if( item == $scope.orderItem ){
        $scope.reverse = !$scope.reverse;
    }
    $scope.orderItem = item;
    $('.iconOrder').removeClass('up').removeClass('down');        
    if( $scope.reverse ){        
        $('.iconOrder[name="' + $scope.orderItem + '"]').addClass('down');
    }
    else {
        $('.iconOrder[name="' + $scope.orderItem + '"]').addClass('up');
    }
}

HTML

orderBy:orderItem:reverse

https://docs.angularjs.org/api/ng/filter/orderBy

因為您避免了orderItems函數的混合使用,所以這種方法更加簡潔。

我解決了這個問題,我是在ng-repeat循環中track by $index

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM