Используйте AngularJS Decorator для настройки uibAccordion
У меня есть страница, на которой я не могу изменять HTML. Могу прикрепить к нему только угловые модули. Страница содержит uibAccordion, где для параметра "close-others" установлено значение "true". Мне нужно как-то установить "ложь".
<uib-accordion close-others="true">
Единственный способ, который пришел мне в голову, - это использовать декоратор, но я не знаю, как изменить атрибут:
angular.module('guide', ['ui.bootstrap'])
.config(['$provide', Decorate]);
function Decorate($provide) {
$provide.decorator('uibAccordionDirective', ['$delegate', function($delegate) {
$delegate[0].closeOthers = function(openGroup) {
var closeOthers = false;
};
return $delegate;
}]);
}
Может ли кто-нибудь подсказать, как это сделать?
1 ответ
Должна иметься возможность изменять функцию https://github.com/angular-ui/bootstrap/blob/master/src/accordion/accordion.js:
...
$delegate.closeOthers = function(openGroup) {
var closeOthers = false;
// var closeOthers = angular.isDefined($attrs.closeOthers) ?
// $scope.$eval($attrs.closeOthers) : accordionConfig.closeOthers;
if (closeOthers) { // Obviously you can remove this whole line
angular.forEach(this.groups, function(group) {
if (group !== openGroup) {
group.isOpen = false;
}
});
}
};
return $delegate;
https://docs.angularjs.org/guide/decorators
Исправьте раздел $Delegate - он заменяет someFn, как вы хотите заменить closeOthers.