обрабатывать событие расширения загрузочного аккордеона, размещенного внутри вкладок

2

Я разместил аккордеон внутри вкладок, используя Angular Bootstrap, но я не могу обработать событие расширения аккордеонной панели. Вот скрипка: http://jsfiddle.net/vruqw9s8/

 $(function () {
    $('accordion').on('show.bs.collapse', function () {
              alert('accordion change');
    });
});
  • 0
    Для Bootstrap UI нет события расширения. Вы можете увидеть этот вопрос о способах решения этой проблемы : stackoverflow.com/questions/15642082/… . Кроме того, в ваш Fiddle вы включили bootstrap.js (и jQuery). Директивы Bootstrap пользовательского интерфейса переписываются как собственные директивы AngularJS, которые предназначены для воспроизведения поведения подключаемых модулей JavaScript Bootstrap. Нет никакой зависимости от bootstrap.js или jQuery. Просто включите Bootstrap CSS.
  • 0
    я уже попробовал что-то открытое, но у меня оно не работает .. ты можешь играть на скрипке так же ..
Теги:
angular-ui
angular-ui-bootstrap
accordion

1 ответ

2
Лучший ответ

Обновленный скрипт

Атрибут is-open в директиве аккордеонной группы UI Bootstrap указывает на связываемое выражение. Выражение должно быть логическим, которое разрешает либо true, либо false. Если значение истинно, группа аккордеона открывается.

Атрибут is-open является двусторонней привязкой, что означает, что всякий раз, когда изменяется свойство родительской области видимости, также изменяется соответствующее изолированное свойство области действия гармонической группы, и наоборот. В результате вы можете использовать его для контроля открытия или закрытия аккордеона с помощью функции $watch.

Итак, чтобы сделать вашу демонстрационную работу Fiddle, вам нужно сделать пару вещей:

  1. Привяжите атрибут is-open к свойству scope в вашем контроллере.
  2. Убедитесь, что свойство scope имеет значение true или false.
  3. Создайте $ watch() для свойства scope.

Привязка атрибута is-open к свойству scope в контроллере проста. В этом случае я просто создал $ scope.status как объект с одним свойством open и дал ему значение false. Это значение будет только начальным значением, так что аккордеон будет закрыт при первом запуске вашей демонстрации. Важно то, что статус должен быть объектом, потому что это работает как двусторонняя привязка. Если вы $scope.status = true статус строке (например, $scope.status = true), а в вашей разметке будет открыто состояние (т. $scope.status = true is-open="status"), оно будет только односвязным. В этом случае он инициализирует аккордеонную группу как открытую, но не будет обновлять область, когда вы нажимаете на элемент, чтобы открыть и закрыть его.

Итак, ваш контроллер для этой части, вы бы:

$scope.status = {
    open: false
};

и в вашей разметке вы получите:

<accordion-group heading="Accordion 2" is-open="status.open">
    Accordian 2 content.
</accordion-group>

Теперь последняя часть - функция $ watch. Функция $ watch имеет пару ключевых частей. Во-первых, вы должны сказать ему, что смотреть, поэтому в этом случае вы должны перейти в status.open. Это предмет, который мы хотим отслеживать, и видеть, меняется ли он. Далее, есть функция слушателя.

Есть два значения, которые всегда передаются функции слушателя. Первое - это новое значение того, что вы смотрите. Вторая - это старая ценность того, что вы смотрите. Порядок этих аргументов здесь имеет значение. Независимо от того, что вы называете это, первое значение всегда будет новым значением. Итак, теперь эта функция $ watch должна иметь смысл:

$scope.$watch('status.open', function(newval, oldval){
    if(oldval !== newval) {
        var state = newval ? 'opening' : 'closing';
        alert('Accordion 2 is '+state);
    }
});

В выражении if я проверяю, действительно ли значение status.open изменилось, сравнив старое значение с новым значением. Если старые и новые значения не совпадают друг с другом, тогда вы можете сделать свое дело. В этом случае я создал переменную с именем state и использовал трехмерный оператор для проверки нового значения, если он true, я устанавливаю значение состояния в "открытие", а если нет, он устанавливает значение "закрытие". Затем я просто вызываю предупреждение.

Это уже слишком долго, поэтому я просто упомянул, что есть третье значение в функции $ watch, которая является равенством объекта. У Бен Наделя есть большой (короткий) небольшой экспериментальный видеоролик, в котором объясняется, как и когда вы используете равенство объектов. Я также создал этот Plunker для вас, который показывает, как использовать такую глубокую проверку значений динамически созданных аккордеонных групп.

Надеюсь, это поможет решить вашу задачу.

  • 0
    Спасибо за объяснение....
  • 0
    The accordion directive builds on top of the collapse directive Angular UI Bootstrap гласит, что The accordion directive builds on top of the collapse directive . Поэтому я ожидаю, что у меня будет доступ к событиям Collapse , таким как: collapsed() , collapsing() , expanded() , expanding() .
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню