【问题标题】:Is there any way to limit amount of repeated items in ng-repeat?有没有办法限制 ng-repeat 中重复项目的数量?
【发布时间】:2017-07-09 16:58:32
【问题描述】:

有什么方法可以限制 AngularJS 中重复的项目数?就像在联系人列表中一样,我需要输入相同的姓名和联系电话,但只输入 2 次,当我尝试第三次输入时,它会显示一些警报,提示您已经输入了联系方式。如何使用 AngularJS 或 JavaScript 来完成这项任务?

我的代码是

<md-list-item ng-show="showContactList" ng-repeat="numbers in contactList track by $index" >
    <i ng-show="numbers.type == 'test'">textsms</i>
    <i ng-show="numbers.type == 'CELL' || numbers.type == 'EXT'">phone</i>
    <img ng-show="numbers.type == 'PAGER'" src="pager.png" width="26">
    <div class="md-list-item-text" ng-class="{'md-offset': phone.options.offset }">
          <h3>{{ numbers.type }}</h3>
          <p>{{ numbers.value }}</p>
    </div>
    <i ng-click="arrayText.push(numbers);">add</i>
</md-list-item>

在上面的代码中,我可以在联系人姓名和号码中添加 N 个号码。

【问题讨论】:

  • 警报在哪里?检测重复的代码在哪里?
  • 感谢您的回复并为含糊之处道歉。尚未给出警报和检测重复值。现在我只能在列表中输入重复的项目。
  • 你必须创建一个插入记录的函数,在这里你可以检查数据是否已经插入。
  • 我有一张联系人卡片,其中我只需要 2 个姓名和 2 个联系人。现在我可以添加 N 个姓名和联系人。如果我限制为 ng-repeat,它将限制为列出项目。但我需要限制如果名称被插入两次然后它不会允许并显示警报。
  • 问题的标题具有误导性。您的问题与ng-repeat 无关

标签: javascript angularjs node.js javascript-objects


【解决方案1】:

您可以通过以下代码限制 ng-repeat 中的显示项目。

在 HTML 模板绑定中

 {{ limitTo_expression | limitTo : limit : begin}}

在控制器中

  $filter('limitTo')(input, limit, begin)

查看https://docs.angularjs.org/api/ng/filter/limitTo了解更多详情。

用于插入创建函数中的限制项

<i class="material-icons md-avatar-icon add-rm-icon margin-right" ng-click="pushFunction(numbers);">add</i>

在控制器中

$scope.pushFunction = funcation(numbers){
    // check number exist 
    $scope.existedNumbers = $scope.arratext.filter(function (objArray) {
       return (objArray == numbers);
    });
    if($scope.existedNumbers && $scope.existedNumbers.length<2)
      $scope.arrayText.push(numbers);
   else
      // show alert
};

【讨论】:

  • 他必须限制重复的项目,而不是循环:(
  • 没错。我需要限制重复项
  • @AnkurAkvaliya 你在哪里检查相同的数据插入?
  • 感谢您的回复。让我实施,然后会回复您。
【解决方案2】:

试试这个

HTML

  <i class="material-icons md-avatar-icon add-rm-icon margin-right" ng-click="insertRecord(numbers);">add</i>

控制器

  var existed = 0;
  $scope.insertRecord = function(numbers){
     var name = numbers.type;
     angular.forEach($scope.arrayText, function(value, key) {
     var arr = Object.values(value);
     if(arr.indexOf(name) !== -1 ) {
            existed++;
            console.info(existed);
      }
    });
    if(existed >= 2){
      console.info('already exist')
      existed = 0;
    }else{
      $scope.arrayText.push(numbers);
      existed = 0;
    }

  }

在var name 变量中,您可以将要检查的属性放入 2 次插入。

【讨论】:

  • 我实现了这段代码,发现当我点击添加图标时,一次添加了 2 个值。即,如果我添加名称,则添加 2 次名称。如果我添加联系人,则列表中会添加 2 次联系人。
  • @Sam 我不确定,但我认为您没有正确放置花括号,请检查一次好吗?
  • 非常感谢。你的代码对我有用。非常感谢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多