我写了自己的指令,通过ajax解析带有select2和gat数据的输入。AngularJS ngModel指令
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-模型工作。如果我用ng-model =“name”添加另一个输入,则该值也应写入此输入。但事实并非如此。
编辑:这是一个jsFiddle
你在哪里使用ng-bind?或者你的意思是ng模型?如果ng-model在你的select2回调函数中的某处,你需要手动更新'scope.name',或者你的searchByName函数已经做到了吗? – 2013-04-24 15:33:49
一把小提琴或一把撬棍将帮助我们找到解决方案。 – Galdo 2013-04-25 02:07:10
哦,该死!是的,ng-model不是ng-bind。我只有两分钟时间写这个。我现在准备一把小提琴。 – StinsonMaster 2013-04-25 06:45:42