使角度材质选择的行为类似于角度ui选择

时间:2016-12-28 19:57:36

标签: angularjs angular-material angular-ui-select

我想让角度材料选择像我的角度ui选择那样工作。我有一些工作,但有一个区别:角度ui选择可以有一个对象,它不在他的ng模型的列表中。

Fiddle for better understanding

 <ui-select ng-model="current_item" name="emitter" autocomplete="off" theme="select2" style="max-width:385px;">
    <ui-select-match placeholder="Select Item" title="{{$select.selected.name}}">{{$select.selected.name}}</ui-select-match>
    <ui-select-choices repeat="item in list" refresh="refresh($select.search)" refresh-delay="0">
          <small>{{item.name}}</small>
    </ui-select-choices>
 </ui-select>

正如你所看到的,角度ui-select与ng-model test4甚至很难在列表中,这正是我想要的角度材料选择的行为。有没有办法做到这一点,还是我坚持使用角度ui选择?

1 个答案:

答案 0 :(得分:1)

尝试以下内容。

我们正在装饰mdOption指令并将ngModel添加到md-option的ngRepeat集合中。

fiddle solution with test4 showing as an option

myApp.directive('mdOption',function(){
    return {
    restrict: 'E',
    priority: 0,
    require: [ '^^mdSelect', '^^ngModel'],
    link: function(scope, ele, attr, ctrls) {
        var repeatExpr = attr.ngRepeat;
        var optionsModelStr = repeatExpr.match(/[ ]+in+[ ]+(.*?)([ \|]+)/)[1];
        var list = scope[optionsModelStr];
        var select = ctrls[0];
        var ngModel = ctrls[1];
        if (ngModel.$modelValue && list.indexOf(ngModel.$modelValue) < 0) {
          list.push(ngModel.$modelValue);
        }

    }
  }
});

这不是生产就绪的代码,只是一个想法。

编辑:尽管这样做了一点点,但在我得到我的列表后,我决定使用一个简单的$scope.list.unshift($scope.current_item);。我认为这更简单=)