清除带有角度

时间:2015-11-10 12:43:13

标签: javascript angularjs jquery-select2

我正在使用Angular指令使用Select2构建一个select。 我把这个结构放在link函数中,如下所示:

var selectProducts = function() {
    return {
        restrict: 'E',

        replace: true,

        scope: false,

        template: '<select id="products_list" ng-model="product.id" ng-change="setProduct()"></select>',

        link: function(scope, element, attrs) {
            $(element).select2({
                placeholder: 'Select...',
                width: '100%',
                minimumInputLength: 2,
                ajax: {
                    url: 'url/to/products',
                    dataType: 'json',
                    data: function(params) {
                        return {
                            q: params.term,
                            page: params.page
                        };
                    },
                    processResults: function(data, page) {
                        return {
                            results: data
                        };
                    },
                    cache: true
                }
            });
        }
    };
};

但是我必须在用户触发操作后清理选择。经过一些搜索,要清理Select2,我们必须:

$(element).val(null);
$(element).trigger('change');

当我这样做时,Angular会发疯并触发错误。在堆栈跟踪之后,我们到达:https://docs.angularjs.org/error/ $ rootScope / inprog?p0 = $ apply

我已经完成了他们要做的事情(使用超时来执行我的操作,因为有两个apply次调用)。但现在,选择不会变得干净,选定的选项仍然存在。之前,它已被清理,但触发了错误。

        scope.$watch(attrs.clean, function(value) {
            if ( value ) {
                $timeout(function() {
                    // Got from https://docs.angularjs.org/error/$rootScope/inprog?p0=$apply
                    if ( scope.$eval(attrs.clean) ) {
                        $(element).val(null);
                        $(element).trigger("change");
                    }
                }, 0, false);
            }
        });

有更好的方法吗?这个timeout电话听起来很奇怪(并且不起作用!)

0 个答案:

没有答案