在angularjs中使用select2从select标签中选择新添加的选项后,如何触发更改事件?

时间:2019-05-18 19:42:12

标签: jquery angularjs jquery-select2

如何使用angularjs中的select2从select标记中选择新添加的选项后触发更改事件?

我创建了angular js指令以在<select>标签中应用select2。我要在select2应用于元素后触发更改事件。我正在使用select2的标签。在select中添加新标签后,我想触发更改事件。但是ng-change事件触发之后,首先触发select2:select事件触发。因此,在选择新添加的选项后,我无法获得ng-model的值。请帮助我解决此问题。

我使用了 jquery 3.2.1 select2 4.0.2 角度js 1.7.8

我已经尝试过以下代码:

<select custom-select2 id="items" ng-model="items" class="form-control"
        ng-change="onChange(items)">
    <option ng-repeat="item in itemlist" value="{{ item.id }}">
      {{ item.name }}
    </option>   
</select>
 let app= angular.module("app",[]);
 app.controller('itemAddController',function($scope, $http){
    $scope.itemlist= {};      
    $scope.onChange = (items) => {
      console.log(items)
    }     
 });
app.directive('customSelect2', function($timeout) {
    return {
        restrict: 'A',
        require: 'ngModel',
        link: function(scope, element, attr, ngModel) {
            $timeout( function(){
                element.select2({
                    allowClear:true,
                    tags: true,
                    tokenSeparators: [",",";"],
                    createTag: function (params) {
                        let obj = {};
                        let term = $.trim(params.term);
                        if (term === '') {
                            return null;
                        }
                        obj = {
                          id: term,
                          text: term,
                          newTag: true // add additional parameters
                        };
                        return obj;
                    }
                }).on("select2:select", function(e) {
                    if(e.params.data.newTag){
                        scope.itemlist.push(e.params.data.text)
                        ngModel.$setViewValue(e.params.data.text);
                    }
                });
            },200);

        }
    }
});

我想在select2事件触发后调用onChange函数。

0 个答案:

没有答案