Различия
Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
js:vuejs:faq [2018/06/09 17:13] – [Q: Как вызвать метод из дочернего компонента?] mirocow | js:vuejs:faq [2018/06/09 20:05] (текущий) – mirocow | ||
---|---|---|---|
Строка 1: | Строка 1: | ||
====== Вопрос / Ответ ====== | ====== Вопрос / Ответ ====== | ||
- | ====== Вызовы компонентов ====== | + | * [[js:vuejs:faq:call-methods-from-components]] |
- | + | ||
- | {{:js:vuejs:0_xzkw0-t4uea3d5yh.png? | + | |
- | + | ||
- | ==== Q: Как вызвать метод из дочернего компонента? | + | |
- | + | ||
- | <code javascript> | + | |
- | new Vue({ | + | |
- | data () { | + | |
- | | + | |
- | }, | + | |
- | method () { | + | |
- | | + | |
- | | + | |
- | } | + | |
- | } | + | |
- | }); | + | |
- | </ | + | |
- | + | ||
- | <code javascript> | + | |
- | const = childComponent = { | + | |
- | data: function () { | + | |
- | | + | |
- | | + | |
- | } | + | |
- | }, | + | |
- | props: { | + | |
- | | + | |
- | type: String, | + | |
- | | + | |
- | | + | |
- | } | + | |
- | } | + | |
- | }, | + | |
- | methods: { | + | |
- | // maybe onchagne may onclick whatever.. | + | |
- | | + | |
- | | + | |
- | } | + | |
- | }, | + | |
- | beforeMount () { | + | |
- | | + | |
- | } | + | |
- | }; | + | |
- | </ | + | |
- | + | ||
- | <code html> | + | |
- | <div id=" | + | |
- | < | + | |
- | : | + | |
- | | + | |
- | </ | + | |
- | < | + | |
- | : | + | |
- | | + | |
- | </ | + | |
- | </div | + | |
- | </ | + | |
- | ==== 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(' | + | |
- | }, | + | |
- | } | + | |
- | </ | + | |
- | </ | + |