我做了一个包含freebases jquery搜索小部件的指令。我希望用户能够动态更改搜索语言,因此我使用$ observe来观看'lang'属性。
问题是每次属性更改时插件都会重新初始化,但不会结束先前初始化的执行。当用户选择术语时,我将其添加到数组中。如果已修改lang属性,则会为属性的每次更改添加所选术语。
我可以过滤数组,只允许具有相同ID的项目出现一次,但我想知道是否有更好的解决方案。
指令:
directive('suggest', function() {
return {
restrict: 'E',
template: "<input type='text'>",
replace:true,
scope:{onSelect:'&'},
link: function(scope, element, attrs) {
attrs.$observe('lang', function(value) {
$(element).suggest({
lang: value
})
.bind("fb-select", function(e, info) {
console.log(info);
scope.onSelect({data:info});
scope.$apply();
});
});
}
};
});