Используйте AngularJS Decorator для настройки uibAccordion - PullRequest
0 голосов
/ 24 октября 2019

У меня есть страница, где я не могу изменить HTML. Я могу только прикрепить к нему угловые модули. Страница содержит uibAccordion, где «close-others» имеет значение «true». Мне нужно как-то установить его на «false».

<uib-accordion close-others="true">

Единственный способ, который мне пришёл в голову, - это использовать Decorator, но я не знаю, как изменить атрибут:

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 Ответ

1 голос
/ 25 октября 2019

Должна быть возможность изменить функцию 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#what-are-decorators-

Исправить раздел $ Delegate - он заменяет someFn так, как вы хотите заменитьcloseOthers.

...