【问题标题】:AngularJS filter already selected optionsAngularJS 过滤器已经选择的选项
【发布时间】:2015-07-15 20:23:28
【问题描述】:

我有 3 个选择,它们都共享相同的选项。由于在其中一个选项中选择了一个选项,我想将其从其他选项中过滤掉。

我在这里尝试了一下,没有任何运气。 http://plnkr.co/edit/ERGTbQSjoX3IpGAomcUn?p=preview

<select name="ques1" ng-model="q1" required>
    <option value="">question</option>
    <option ng-repeat="question in questions | filter: { Id : '!' + q2 } | filter: { Id : '!' + q3 }" value="{{ question.Id }}">{{ question.Question }}</option>
</select>

有什么建议吗?并提前致谢。

【问题讨论】:

    标签: angularjs angularjs-filter


    【解决方案1】:

    我终于让它工作了。根据document。您可以将函数作为参数传递给过滤器。所以我创建了一个函数,它返回一个将传递给过滤器的函数:

      $scope.negative = function(){
        var arr = Array.prototype.slice.call(arguments) 
    
         return function(value ,index, array){
           var scope = $scope;
    
           for(var i = 0 ; i<arr.length ;i++) {
              if(value.Id == scope[arr[i]]) return false;
           }
    
           return true;
    
         }
      }
    

    这是example

    【讨论】:

    • 虽然您的方法确实有效@jme11,但我的方案允许用户从他们选择的任何选择开始。这是一个我不认为包括在内的细节。
    【解决方案2】:

    差点明白了:

    var app = angular.module('demo', []);
    
    app.controller('MainCtrl', function($scope) {
      $scope.q1 = '';
      $scope.q2 = '';
      $scope.q3 = '';
        
      $scope.questions = [
        { Id: 1, Question: '1 Question' },
        { Id: 2, Question: '2 Question' },
        { Id: 3, Question: '3 Question' },
        { Id: 4, Question: '4 Question' },
        { Id: 5, Question: '5 Question' }
      ]; 
    });
    <script src="https://code.angularjs.org/1.4.3/angular.js"></script>
    <div ng-app="demo" ng-controller="MainCtrl">
      <form name="form" novalidate>
        <div>
          <select name="ques1" ng-model="q1" required>
            <option value="">question</option>
            <option ng-repeat="question in questions" value="{{ question.Id }}">{{ question.Question }}</option>
          </select>
          <p class="error" ng-show="form.ques1.$error.required && form.ques1.$touched">question is required</p>
        </div>
        <div>
          <select name="ques2" ng-model="q2" required>
            <option value="">question</option>
            <option ng-repeat="question in questions | filter: ({Id: '!' + q1})" value="{{ question.Id }}">{{ question.Question }}</option>
          </select>
          <p class="error" ng-show="form.ques2.$error.required && form.ques2.$touched">question is required</p>
        </div>
        <div>
          <select name="ques3" ng-model="q3" required>
            <option value="">question</option>
            <option ng-repeat="question in questions | filter: ({ Id : '!' + q1 }) | filter: ({ Id : '!' + q2 })" value="{{ question.Id }}">{{ question.Question }}</option>
          </select>
          <p class="error" ng-show="form.ques3.$error.required && form.ques3.$touched">question is required</p>
        </div>
      </form>
    </div>

    【讨论】:

    • 您的第一个和第二个选择不会过滤掉第三个选择的选择。比如说,如果您的第三个选择选择“3 个问题”,那么第一个选择不应再包含“3 个问题”选项。
    • 所以你的假设是有人会先从第三个选择中挑选?嗯,有趣的用户体验假设。我没有说你的错,我只是假设你这样做是为了选择安全问题。我不希望这种行为基于这种用法,在这种情况下我会立即锁定问题/答案对。无论如何,很高兴你得到了你想要的解决方案。祝你好运。
    猜你喜欢
    • 1970-01-01
    • 2019-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-26
    • 2018-08-21
    • 1970-01-01
    • 2015-06-24
    相关资源
    最近更新 更多