Javascript 扩展UI选择控制器(角度)
我正在尝试扩展ui select(版本0.17.1)以使其在单击时刷新。这里有一个例子(),我一直用它作为起点 我希望这种情况在应用程序范围内发生,所以我用我自己的包含div按钮的ui选择指令html替换了ui选择指令html。我还添加了一个装饰器,用一个尚未定义的新控制器替换指令控制器Javascript 扩展UI选择控制器(角度),javascript,angularjs,inheritance,decorator,angular-ui-select,Javascript,Angularjs,Inheritance,Decorator,Angular Ui Select,我正在尝试扩展ui select(版本0.17.1)以使其在单击时刷新。这里有一个例子(),我一直用它作为起点 我希望这种情况在应用程序范围内发生,所以我用我自己的包含div按钮的ui选择指令html替换了ui选择指令html。我还添加了一个装饰器,用一个尚未定义的新控制器替换指令控制器 myapp.app.config(function(provide) { $provide.decorator("uiSelectDirective", [ "$delegate", "uiSelect
myapp.app.config(function(provide) {
$provide.decorator("uiSelectDirective", [ "$delegate", "uiSelectConfig", "$controller"], function ($delegate, uiSelectConfig, $controller) {
var directive = $delegate[0];
// This line throws error Unknown provider
var $select = $controller('uiSelectCtrl');
return $delegate;
}]);
});
我的问题是,我还想装饰/扩展控制器,以便在整个应用程序中添加额外的功能。我不想全部重写它,所以我正在寻找合适的方法来扩展这样一个控制器
谢谢。我通过重载指令的编译方法解决了这个问题:
$provide.decorator('uiSelectDirective', ['$delegate', function ($delegate) {
var directive = $delegate[0];
var compile = directive.compile;
directive.compile = function (tElement, tAttrs) {
var link = compile.apply(this, arguments);
return function (scope, element, attrs, ngModel) {
link.apply(this, arguments);
var ctrl = ngModel[0];
var activate = ctrl.activate;
//I had to close the dropdown when clicking on the directive
ctrl.activate = function (initSearchValue, avoidReset) {
if (!ctrl.disabled) {
if (ctrl.open) {
ctrl.close();
} else {
activate(initSearchValue, avoidReset);
}
}
}
};
};
return $delegate;
}]);