Angularjs 设置文本输入模型后,角度搜索过滤器将中断

Angularjs 设置文本输入模型后,角度搜索过滤器将中断,angularjs,angularjs-directive,Angularjs,Angularjs Directive,我正在编写一个组合框作为一个指令,但遇到了一些问题。它的设置使得当有人点击输入时,它会在下拉列表中显示所有选项,当你输入时,它会过滤结果。如果您单击一个结果,它应该用该值填充输入 不幸的是,我似乎做错了什么,所以当您单击结果时,它会填充字段,但是如果您删除字段的值,而不是返回原始搜索,它现在只解析您选择的结果。它显示所有值,但仅键入与搜索文本和以前单击的值匹配的值进行搜索 指令的调用方式: <combobox data="combobox.systems" results="systemS

我正在编写一个组合框作为一个指令,但遇到了一些问题。它的设置使得当有人点击输入时,它会在下拉列表中显示所有选项,当你输入时,它会过滤结果。如果您单击一个结果,它应该用该值填充输入

不幸的是,我似乎做错了什么,所以当您单击结果时,它会填充字段,但是如果您删除字段的值,而不是返回原始搜索,它现在只解析您选择的结果。它显示所有值,但仅键入与搜索文本和以前单击的值匹配的值进行搜索

指令的调用方式:

<combobox data="combobox.systems" results="systemSearch" placeholder="System"></combobox>
我确实发现将setBox方法更改为

scope.setBox = function ($event, set) {
    scope.search = angular.copy(set);
}
这有点帮助,但几乎没有解决问题。我已经做了一次尝试帮助:

我做错了什么?

这应该可以:

scope.setBox = function ($event, set) {
    scope.search.value = set.value;
};
如果您需要保留所选项目的记录:

scope.setBox = function ($event, set) {
    scope.search.value = set.value;
    scope.selected = angular.copy(set);
};
此外,您实际上不需要传递$event并将其设置到setBox方法中,您可以执行以下操作:

scope.setBox = function () {
    scope.search.value = this.set.value;
    scope.selected = angular.copy(this.set);
};
scope.setBox = function ($event, set) {
    scope.search.value = set.value;
    scope.selected = angular.copy(set);
};
scope.setBox = function () {
    scope.search.value = this.set.value;
    scope.selected = angular.copy(this.set);
};