Используйте 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.

Другие вопросы по тегам