javascript - 指令中的 AngularJS ngModel

标签 javascript angularjs bind directive

我编写了自己的指令,通过 ajax 使用 select2 和 gat 数据解析输入。

HTML:

<input type="text"
       ng-model="name"
       data-ui-event="{keyup: 'searchByName($event)',change: 'searchByName($event)'}"
       ajax-select2="single" data-url="/ajax/name/"
/>

JS:

.directive('ajaxSelect2', ['$timeout', function ($timeout) {
return {
    restrict: 'A',
    link: function (scope, element, attrs) {
        var reqParams = {},
            multiple = attrs.ajaxSelect2 === "multi" ||
                       attrs.ajaxSelect2 === "multiple" ? true : false;

        switch(element.prop("tagName")) {
            case 'INPUT':
                element.select2({
                    multiple: multiple,
                    ajax: {
                        quietMillis: 200,
                        url: attrs.url,
                        dataType: 'json',
                        type: 'POST',
                        data: function (term, page) {
                            var req = {
                                "val": term,
                            };
                            return JSON.stringify(req);
                        },
                        results: function (data, page) {
                            return { results: data };
                        }
                    }
                });
            break;

            default:
                alert('ajax-select2 works only with input fields!');
            break;
        }

        element.bind("change", function () {
            element.show(); //shows the input
            $timeout(function () {
                element.trigger('keyup'); //doesn't work
            });
        });
    }
}}])

我的问题:所选值设置为输入并调用 searchByName 函数,但它不适用于我的 ng-model。如果我使用 ng-model="name"添加另一个输入,则该值也应该写入此输入。但事实并非如此。

编辑:这是一个 jsFiddle

最佳答案

明白了!
我必须手动更新范围内的 ng-model。

element.bind("change", function(e) {
    scope.$apply(function() {
        scope[attrs.ngModel] = e.val;
    });
});

完整代码示例 here .

关于javascript - 指令中的 AngularJS ngModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16195369/

相关文章:

javascript - 在 D3 Observable 中禁用缩放但保留平移

javascript - JQuery - 特定文本的点击事件?

javascript - AngularJS ng-repeat 在 Ajax 调用后不更新

javascript - AngularJS toastr 在文件上传时显示警报两次而不是一次

javascript - 使用上下文调用bind()

javascript - 使用 AJAX 从原始 JavaScript 到 PHP 的值

javascript - 如何打开多部分 Bootstrap 3 Accordion 菜单的正确部分?

javascript - 预检响应具有无效的 HTTP 状态代码 404 angular js

r - 如何列绑定(bind) 2 个表但删除同一列

javascript - 绑定(bind)和解除绑定(bind)切换