Angular 1.x:使用select&带有自定义过滤器的ng-options

时间:2016-03-13 04:07:26

标签: angularjs select lodash angular-ngmodel angular-filters

前言

我编写了一个自定义过滤器,用于从多个webView.addEventListener(LocationChangeEvent.LOCATION_CHANGING, locationChanging); function locationChanging(e:LocationChangeEvent):void { e.preventDefault(); var query:String = e.location.split("?")[1]; var vars:URLVariables = new URLVariables(query); trace(vars.lat, var.lng); } 输入的可用选项列表中排除当前选定的选项。

codepen - http://codepen.io/jusopi/pen/XdjNWa?editors=1010

模板实施

<select>

过滤

<select class="form-control" ng-model="vc.cols[0].attr" 
    ng-options="opt.attr as opt.name for opt in vc.opts | excludedAttrs:vc.cols">

问题

我不确定这是否是我对Lodash .filter('excludedAttrs', function () { return function (opts, cols) { return _.differenceWith(opts, cols, function (opt, col) { return opt.attr === col.attr; }); }; }) API docs)的误解,或者是否有一些巧妙地使用过滤器{{1}其他输入。

据我了解differenceWith,它意味着比较2个数组并使用比较器函数,如果要排除它们则返回true。过滤器实际上有效,但为什么它不能正确呈现<select>默认值或选择值?

1 个答案:

答案 0 :(得分:0)

选择未显示当前所选ng-model的问题是因为<option/>中由于过滤器将其排除在集合中而未出现ng-options

为了解决这个问题,我需要排除当前选择的值(即ng-model从...被排除。基本上我不得不将其添加回来进入已过滤的ng-options

codepen - http://codepen.io/jusopi/pen/XdjNWa?editors=1010

模板实施

<select ng-model="vc.cols[0].attr" 
    ng-options="opt.attr as opt.name for opt in vc.opts | excludedAttrs:vc.cols:0">

修复过滤器

.filter('excludedAttrs', function () {
    return function (opts, cols, i) {

        // fix
        cols = _.without(cols, cols[i]);
        // end fix

        return _.differenceWith(opts, cols, function (opt, col) {
            return opt.attr === col.attr;
        });
    };
})