Я пытаюсь открыть угловой гармоник в header.html
, нажав кнопку, которая находится в body.html
. По сути, запуск события в одном представлении с совершенно другого вида. Кто-нибудь знает, как это сделать в Angular?Как вызвать событие в одном представлении с другого вида?
ответ
Что вы можете сделать, это использовать события, чтобы ваша директива о гармонии знала, что что-то случилось или используйте общую службу. Учитывая производительность, это не имеет большого значения, но только если вы используете $emit
вместо $broadcast
, так как событие, запущенное через $emit
, пузырится вверх по вашей иерархии областей, а $broadcast
отправляет событие вниз. Также не забудьте запустить событие на $rootScope
, так что он больше не будет пузыряться.
Так вы в случае, если вы хотите использовать события для вас может быть метод на компоненте, который запускает событие с помощью $emit
на $rootScope
следующим образом:
function openAccordion() {
$rootScope.$emit('on-accordion-open', null);
}
Вы могли бы использовать это на ваш взгляд, например в body.html
. Помните, что вышеприведенная функция является частью другой директивы/компонента или контроллера.
<button ng-click="vm.openAccordion()">Open Accordion</button>
Также обратите внимание, что я предполагаю, что вы используете controllerAs
синтаксис (набор для vm
).
В вашей директиве аккордеона вы можете подключить слушателей к нескольким событиям, например, on-accordion-open
:
$rootScope.$on('on-accordion-open', function() {
// Open the accordion
});
Другой soltuion является использование общей службы. В этом случае я бы создал AccordionServce
, который знает все экземпляры аккордеонов. Услуга может выглядеть следующим образом:
angular.module('myApp').service('AccordionService', function() {
var accordions = {};
this.addAccordion = function(name, accordion) {
accordions[name] = accordion;
};
this.removeAccordion = function(name) {
delete accordions[name];
};
this.getAccordion = function(name) {
return accordions[name];
};
});
В контроллере вашего аккордеона в затем добавить аккордеон в AccordionService
через
accordionService.addAccordion('myAccordion', this);
The this
в фрагменте кода выше, отсылая к контроллеру аккордеона. Это важно, потому что если вы затем получите аккордеон в своем компоненте в body.html
, вы получите экземпляр контроллера и сможете вызывать методы вроде open
.
Таким образом, в компоненте тела вы можете вводить AccordionService
и получить гармонь вызвать метод:
accordionService.getAccordion('myAccordion').open();
Убедитесь определить open
на контроллере Аккордеон в.
- 1. Затухание в одном представлении для другого
- 2. Как вызвать метод с другого контроллера вида
- 3. Событие Ember в одном представлении уточняет другое?
- 4. emberjs: как вызвать пользовательское событие в представлении
- 5. Как вызвать функцию с другого контроллера вида с разными классами
- 6. Как использовать два вида коллекции в одном представлении таблицы
- 7. Как вызвать метод, определенный в одном виде деятельности, с другого
- 8. Получить событие от другого контроллера вида
- 9. В Extjs, как вызвать функцию в представлении с другого контроллера?
- 10. Как вызвать класс из другого вида деятельности?
- 11. Как мне вызвать функцию с другого контроллера вида?
- 12. Доступ к функции вида с другого вида
- 13. Как получить доступ к объекту на одном представлении с другого вида?
- 14. Как показать два контроллера вида в одном представлении?
- 15. Как использовать два вида таблицы в одном представлении?
- 16. Как вызвать пользовательский метод в пользовательском представлении из вида деятельности
- 17. Как вызвать кнопку с другого вида с помощью Swift
- 18. Как добавить событие, созданное на одном представлении, но отображаемое с другого контроллера представления?
- 19. Вызвать строку в одном файле от другого
- 20. В Backbone.js, как мне вызвать функцию в одном представлении из другого представления?
- 21. Как вызвать событие click после другого щелчка
- 22. iOS: Как вызвать корневой контроллер с другого контроллера вида
- 23. MPMediaPickerController в одном представлении и MPMediaPlayback в другом представлении. Как?
- 24. Как вызвать метод при представлении контроллера вида из контроллера модального вида
- 25. Рендер другого шаблона в Backbone.js в одном представлении
- 26. Как скрыть панель вкладок при представлении другого вида
- 27. Обновление объекта с другого вида
- 28. Как вызвать событие автоматического клика в представлении MVC?
- 29. Создание вида в представлении
- 30. не удалось загрузить два вида таблицы в одном представлении контроллера
Вы можете транслировать событие из контроллера для страницы HTML с кнопкой на контроллер для страницы с выпадающим списком. Посмотрите [здесь] (http://stackoverflow.com/questions/14502006/working-with-scope-emit-and-on). –
Или просто установите флаг в $ rootScope. – dfsq
Об этом много раз ответили на stackoverflow. Я знаю, потому что я ответил примерно на 3 из них: –