代码之家  ›  专栏  ›  技术社区  ›  Noor A Shuvo

orderby和track by$index在AngularJS中不起作用

  •  0
  • Noor A Shuvo  · 技术社区  · 6 年前

    我订了一张单子 track by $index . 但看来,名单是没有顺序的。

    <div ng-controller="MyCtrl">
      <div ng-repeat="rfi in rfiList | orderBy:['name', 'status'] track by $index">
        <p>
          {{rfi.name}}==>{{rfi.status}}
          <button ng-click="search($index)">OK      
         </button>
        </p>
      </div>
    </div>
    

    javascript部分是

    var myApp = angular.module('myApp', []);
    
    function MyCtrl($scope) {
      $scope.rfiList = [{
          name: 'GHI',
          status: true
        },
        {
          name: 'GHI',
          status: false
        },
        {
          name: 'DEF',
          status: true
        },
        {
          name: 'DEF',
          status: false
        },
        {
          name: 'ABC',
          status: true
        },
        {
          name: 'JKL',
          status: true
        }
      ];
    
      $scope.search = function(index) {
        alert('Index is=' + index + ' and value is=' + $scope.rfiList[index].name + '-->' + $scope.rfiList[index].status);
      };
    }
    

    这里发生了什么,在 search 方法,更改列表顺序后,rfiList[索引]未获取该值。

    在对列表进行排序之后,如何使用索引获取值?

    这是密码 jsfiddle

    3 回复  |  直到 6 年前
        1
  •  2
  •   Sudhir Ojha    6 年前

    试试这个:

    var myApp = angular.module('myApp', []);
    
    function MyCtrl($scope) {
      $scope.rfiList = [{
          name: 'GHI',
          status: true
        },
        {
          name: 'GHI',
          status: false
        },
        {
          name: 'DEF',
          status: true
        },
        {
          name: 'DEF',
          status: false
        },
        {
          name: 'ABC',
          status: true
        },
        {
          name: 'JKL',
          status: true
        }
      ];
    
      $scope.search = function(index,rfi) {
        alert('Index is=' + index + ' and value is=' + rfi.name + '-->' + rfi.status);
      };
    }
    

    在你的html中

    <div ng-controller="MyCtrl">
      <div ng-repeat="rfi in rfiList | orderBy:['name', 'status'] track by $index">
        <p>
          {{rfi.name}}==>{{rfi.status}}
          <button ng-click="search($index, rfi)">OK      
         </button>
        </p>
      </div>
    </div>
    
        2
  •  1
  •   Ankit Sharma    6 年前

    由于管道/过滤器的原因,列表是在代码的前端部分排序的,而不是在控制器本身中。

    如果需要控制器端的有序列表,请尝试在控制器本身中对其进行排序。

    希望有帮助。

        3
  •  0
  •   kiran malvi    6 年前

    请遵循以下代码,它工作正常:

    HTML格式

    <div ng-controller="MyCtrl">
      <div ng-repeat="rfi in rfiList | orderBy:name:status track by $index"> 
    
        <p>
          {{rfi.name}}==>{{rfi.status}}
          <button ng-click="search($index)">OK      
         </button>
        </p>
      </div>
    </div>
    

    JS公司

    var myApp = angular.module('myApp', []);
    
    function MyCtrl($scope) {
      $scope.rfiList = [{
          name: 'GHI',
          status: true
        },
        {
          name: 'GHI',
          status: false
        },
        {
          name: 'DEF',
          status: true
        },
        {
          name: 'JKL1',
          status: true
        },
        {
          name: 'DEF',
          status: false
        },
        {
          name: 'ABC',
          status: true
        }
      ];
    
      $scope.search = function(index) {
        console.log($scope.rfiList[index]);
        alert('Index is=' + index + ' and value is=' + $scope.rfiList[index].name + '-->' + $scope.rfiList[index].status);
      };
    }