Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 过滤器不能与AngularStrap bs select和ng选项一起使用_Javascript_Angularjs_Ng Options_Angular Strap_Angular Filters - Fatal编程技术网

Javascript 过滤器不能与AngularStrap bs select和ng选项一起使用

Javascript 过滤器不能与AngularStrap bs select和ng选项一起使用,javascript,angularjs,ng-options,angular-strap,angular-filters,Javascript,Angularjs,Ng Options,Angular Strap,Angular Filters,我正试图根据AngularStrap的规范,使用ng options指令过滤bs select下拉列表中的可用选项列表。我只是简单地以他们为例 HTML: <button type="button" class="btn btn-default btn-sm" ng-model="selectedIcon" data-html="1" data-multiple="1" ng-options="icon.value as icon.label for icon

我正试图根据AngularStrap的规范,使用ng options指令过滤bs select下拉列表中的可用选项列表。我只是简单地以他们为例

HTML

<button type="button" class="btn btn-default btn-sm" ng-model="selectedIcon" 
    data-html="1"
    data-multiple="1" 
    ng-options="icon.value as icon.label for icon in icons | filter:iconSearch"
    bs-select>
    Action <span class="caret"></span>
</button>
<input type="text" class="form-control input-sm" ng-model="iconSearch" />
$scope.selectedIcons = [];
$scope.icons = [
    {"value":"Gear","label":"<i class=\"fa fa-gear\"></i> Gear"},
    {"value":"Globe","label":"<i class=\"fa fa-globe\"></i> Globe"},
    {"value":"Heart","label":"<i class=\"fa fa-heart\"></i> Heart"},
    {"value":"Camera","label":"<i class=\"fa fa-camera\"></i> Camera"}
];
<pre>{{icons | filter:iconSearch | json}}</pre>
问题

  • 甚至可以动态过滤选项数组并让bs select做出相应的响应吗
  • 如果是,怎么做?如果没有,如何将其更改为有效

  • 似乎没有对筛选器求值以生成选项列表。您可以在控制器中进行过滤

    在控制器中:

    <button type="button" class="btn btn-default btn-sm" ng-model="selectedIcon" 
       data-html="1" data-multiple="1" 
       ng-options="icon.value as icon.label for icon in getIcons()" bs-select>
            Action <span class="caret"></span>
     </button>
     <input type="text" class="form-control input-sm" ng-model="iconSearch.value" />
    
    在你看来:

    
    行动
    
    angular.module('app',['mgcrea.ngStrap','ngSanitize'])控制器('ctrl',函数($scope,filterFilter){
    $scope.selectedIcons=[];
    变量图标=[{
    “价值”:“装备”,
    “标签”:“齿轮”
    }, {
    “价值”:“全球”,
    “标签”:“全球”
    }, {
    “价值”:“心”,
    “标签”:“心脏”
    }, {
    “值”:“摄像机”,
    “标签”:“照相机”
    }];
    $scope.getIcons=函数(){
    返回过滤器过滤器(图标,$scope.iconSearch);
    }
    });
    
    
    行动
    
    @dfsq是的,我也很惊讶。不过,我以前从未在带有ng选项的视图上使用过过滤器。我相信regex for ng选项表达式解析器忽略了filterWell过滤器,它可以很好地处理ngOptions,看起来就像AngularStrap的问题一样。无论如何,您找到了一个使用控制器的解决方法。是的,您是对的,问题似乎出在
    var-watchedOptions=parsedOptions.$match[7]。replace(/\ |.+/,“”)。trim();scope.$watch(watchedOptions,function(newValue,oldValue){
    在bsSelect代码中,它只监视作用域上的
    图标
    ,并更新dom。过滤器被忽略。因此,要么设置
    scope.icons
    并在keyup事件上使用过滤器更新图标,要么提供一个getter方法,这就是我所能看到的解决方法。
    <button type="button" class="btn btn-default btn-sm" ng-model="selectedIcon" 
       data-html="1" data-multiple="1" 
       ng-options="icon.value as icon.label for icon in getIcons()" bs-select>
            Action <span class="caret"></span>
     </button>
     <input type="text" class="form-control input-sm" ng-model="iconSearch.value" />