Vue 3-如何从另一个组件调用函数

zbdgwd5y  于 2022-11-17  发布在  Vue.js
关注(0)|答案(2)|浏览(501)

我开始使用Vue 3,并创建了一些基本的应用程序添加项目到列表。
我有两个组件:ItemListItemForm。这两者都添加到主App.vue组件中,如下所示:

应用程序版本-简化版

  1. <template>
  2. <ItemsList/>
  3. <ItemForm/>
  4. </template>

ItemsList中,我有一个名为“items”的属性。还有一个函数addItem(),用于向列表中添加新项。
ItemForm中有一个表单,在提交时,我希望将此数据从表单发送到ItemsList组件以更新列表视图
我检查了一些东西,没有为我工作(我读到,在Vue 2是EventBus这是用于这种情况).我不想也学习一些坏的方法来解决问题,所以我向你寻求帮助.
编辑次数

应用程序版本

  1. <template>
  2. <div>
  3. <ItemsList/>
  4. </div>
  5. <div>
  6. <ItemForm/>
  7. </div>
  8. </template>
  9. <script setup>
  10. import ItemForm from "@/components/ItemForm";
  11. import ItemsList from "@/components/ItemsList";
  12. </script>

物料表单版本

  1. <template>
  2. <form v-on:submit="addItem">
  3. <input type="text" v-model="title"/>
  4. <textarea v-model="description"></textarea>
  5. <button>Add item</button>
  6. </form>
  7. </template>
  8. <script>
  9. export default {
  10. data() {
  11. return {
  12. title: '',
  13. description: ''
  14. }
  15. },
  16. methods: {
  17. addItem(e) {
  18. e.preventDefault();
  19. }
  20. }
  21. }
  22. </script>

项目列表版本

  1. <template>
  2. <ul>
  3. <li v-for="item in items">
  4. <p><b>{{ item.title }}</b></p>
  5. </li>
  6. </ul>
  7. </template>
  8. <script>
  9. export default {
  10. data() {
  11. return {
  12. items: []
  13. }
  14. },
  15. methods: {
  16. addItem: function(item) {
  17. this.items.push(item);
  18. }
  19. },
  20. }
  21. </script>
kq4fsx7k

kq4fsx7k1#

您可能应该使用emits将数据从子组件共享到父组件。我已经设置了一个Vue3 Composition API示例。请在此处查看:
父项:

  1. <template>
  2. <Comp @send-data="callback" />
  3. <input v-model="myInput" />
  4. </template>
  5. <script setup>
  6. import { ref } from 'vue'
  7. import Comp from './Comp.vue'
  8. const myInput = ref('')
  9. const callback = data => myInput.value = data
  10. </script>

子项:

  1. <template>
  2. <button
  3. @click="btnClicked()"
  4. v-text="`Click to send data`"
  5. />
  6. </template>
  7. <script setup>
  8. import { ref } from 'vue'
  9. const emits = defineEmits(['sendData'])
  10. const btnClicked = () => emits('sendData', 'some data')
  11. </script>
  • 如果你分享一些代码,我们可以更好地帮助你,编写更好的例子,接近你想要达到的目标。
展开查看全部
r8uurelv

r8uurelv2#

我找到了解决问题办法:https://pinia.vuejs.org/
也许有人会需要这个信息。

编辑

您可以使用store管理应用程序中的数据

相关问题