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