Различия
Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
js:vuejs:faq [2018/06/09 16:47] – [Через ссылки $refs] mirocow | js:vuejs:faq [2018/06/09 20:05] (текущий) – mirocow | ||
---|---|---|---|
Строка 1: | Строка 1: | ||
====== Вопрос / Ответ ====== | ====== Вопрос / Ответ ====== | ||
- | ===== Q: Как вызвать метод из дочернего компонента? | + | * [[js:vuejs:faq:call-methods-from-components]] |
- | + | ||
- | + | ||
- | ===== Q: Как вызвать метод из родительского компонента? | + | |
- | + | ||
- | ==== С помощью %emit ==== | + | |
- | + | ||
- | <code javascript> | + | |
- | methods: { | + | |
- | something() { this.$emit(' | + | |
- | } | + | |
- | </ | + | |
- | + | ||
- | <code html> | + | |
- | < | + | |
- | </ | + | |
- | + | ||
- | <code javascript> | + | |
- | new Vue({ | + | |
- | methods: { | + | |
- | handler(params) { | + | |
- | console.log(params); | + | |
- | } | + | |
- | }); | + | |
- | </ | + | |
- | + | ||
- | ==== Через ссылки $refs ==== | + | |
- | + | ||
- | <code javascript> | + | |
- | import ChildForm from ' | + | |
- | + | ||
- | new Vue({ | + | |
- | el: '# | + | |
- | data: { | + | |
- | item: {} | + | |
- | }, | + | |
- | template: ` | + | |
- | < | + | |
- | < | + | |
- | < | + | |
- | </ | + | |
- | `, | + | |
- | | + | |
- | submit() { | + | |
- | this.$refs.form.submit() | + | |
- | } | + | |
- | }, | + | |
- | components: { ChildForm }, | + | |
- | }); | + | |
- | </ | + | |
- | + | ||
- | <code html> | + | |
- | < | + | |
- | ... | + | |
- | </ | + | |
- | + | ||
- | < | + | |
- | export default { | + | |
- | name: ' | + | |
- | props: [' | + | |
- | methods: { | + | |
- | submit() { | + | |
- | ... | + | |
- | } | + | |
- | } | + | |
- | } | + | |
- | </ | + | |
- | </ | + | |
- | + | ||
- | ==== Через системный вызов $bus ==== | + | |
- | + | ||
- | <code javascript> | + | |
- | import ChildForm | + | |
- | + | ||
- | new Vue({ | + | |
- | el: '# | + | |
- | data: { | + | |
- | item: {}, | + | |
- | bus: new Vue(), | + | |
- | }, | + | |
- | template: ` | + | |
- | < | + | |
- | < | + | |
- | < | + | |
- | </ | + | |
- | `, | + | |
- | methods: { | + | |
- | submit() { | + | |
- | this.bus.$emit(' | + | |
- | } | + | |
- | }, | + | |
- | components: { ChildForm }, | + | |
- | }) | + | |
- | </ | + | |
- | + | ||
- | <code html> | + | |
- | < | + | |
- | ... | + | |
- | </ | + | |
- | + | ||
- | < | + | |
- | export default { | + | |
- | name: ' | + | |
- | props: [' | + | |
- | methods: { | + | |
- | submit() { | + | |
- | ... | + | |
- | } | + | |
- | }, | + | |
- | mounted() { | + | |
- | this.bus.$on(' | + | |
- | }, | + | |
- | } | + | |
- | </ | + | |
- | </ | + |