我为输入元素创建了一个指令,该指令创建了一个自定义的 select2 下拉菜单。
选择一个元素后,原始输入字段(用于通过 ngModel 过滤数据)被从下拉列表中选择的数据填充,但不会触发输入的更改事件。
如果我手动更改输入值,则过滤器正在工作。
这是我的指令的代码。
.directive('ajaxSelect2', ['$timeout', function($timeout) {
return {
restrict: 'A',
link: function (scope, element, attrs) {
switch(element.prop("tagName")) {
case 'INPUT':
$timeout(function() {
element.select2({
[ ... ] //the select2 part
});
});
break;
}
/* update the input value */
element.bind("change", function(e) {
scope.$apply(function() {
scope[attrs.ngModel] = e.val;
});
});
scope.$watch(element, function () {
console.log('x'); //not called
});
}
}
}])
我认为element.bind("change")inscope.apply()会触发视图更新,但它不起作用。有人知道如何告诉 ngModel 它有新数据吗?
编辑:我想通了,问题是 ngModel。因为我必须过滤几个值,所以我的模型是filter.foobar. 这是行不通的。如果我将模型更改为foobar,它将起作用。我创建了一个小提琴来说明:http: //jsfiddle.net/StinsonMaster/6t3Nt/3/