Javascript 过滤器不能与AngularStrap bs select和ng选项一起使用
我正试图根据AngularStrap的规范,使用ng options指令过滤bs select下拉列表中的可用选项列表。我只是简单地以他们为例 HTML: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
<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>
问题
似乎没有对筛选器求值以生成选项列表。您可以在控制器中进行过滤 在控制器中:
<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" />