首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >两个子组件之间的数据传输问题

两个子组件之间的数据传输问题
EN

Stack Overflow用户
提问于 2019-05-08 06:46:52
回答 2查看 48关注 0票数 0

下午好,我有两个子组件头和分页。在标题中,我有一个输入搜索引擎和两个输入(标题和正文),以便能够添加一个帖子到分页。我设法将搜索值传输到分页组件,但不知道如何从两个输入(title、body)传递值。我用来传送事件总线。当您单击AddPost按钮时,请帮助我将两个输入(标题、正文)的值传递到分页组件中。

我在GitHub上的代码

app截图

我的组件头代码:

代码语言:javascript
运行
复制
    <template>
<div class="header">
  <input type="text" v-model="search" class="header_input_search" placeholder="Search" @input="saveMessage" />
  <img src="src/assets/milk.png">
  <div class="header_div_inputs">
    <input type="text" v-model="createTitle" class="created"/>
    <p><input type="text" v-model="createBody" class="createBody"/></p>
  </div>
  <button  @click="addPost()" class="addPost">AddPost</button>
</div>
</template>

<script>
  import axios from 'axios';
  import {eventEmitter} from './main'

  export default {
    name: 'Header',
    data () {
      return {
        search: '',
        createTitle: '',
        createBody: '',
      }
    },
    methods:{
      saveMessage(){
        eventEmitter.$emit('messageSave', this.search)
      },
    }
  }
</script>

我的组件分页代码:

代码语言:javascript
运行
复制
<template>
  <div class = "app">
    <ul>
      <li v-for="(post, index) in paginatedData" class="post" :key="index">
        <router-link :to="{ name: 'detail', params: {id: post.id, title: post.title, body: post.body} }">
        <img src="src/assets/nature.jpg">
        <p class="boldText"> {{ post.title }}</p>
        </router-link>
        <p> {{ post.body }}</p>
      </li>
      </ul>
        <div class="allpagination">
          <button type="button" @click="page -=1" v-if="page > 0" class="prev"><<</button>
          <div class="pagin">
            <button class="item"
            v-for="n in evenPosts"
            :key="n.id"
            v-bind:class="{'selected': current === n.id}"
            @click="page=n-1">{{ n }} </button>
          </div>
          <button type="button" @click="page +=1" class="next" v-if="page < evenPosts-1">>></button>
        </div>
      </div>
    </template>

    <script>
      import {mapState} from 'vuex'
      import {eventEmitter} from './main'
      export default {
        name: 'app',
        data () {
          return {
            current: null,
            page: 0,
            visiblePostID: '',
            pSearch: ''
          }
        },
        mounted(){
          this.$store.dispatch('loadPosts')
        },
        computed: {
          ...mapState([
          'posts'
          ]),
          evenPosts: function(posts){
            return Math.ceil(this.posts.length/6);
          },

          paginatedData() {
            const start = this.page * 6;
            const end = start + 6;
            return this.filteredPosts.slice(start, end);
          },
          filteredPosts() {
            return this.posts.filter((post) => {
              return post.title.match(this.pSearch);
            });
          },
        },
        created(){
          eventEmitter.$on('messageSave', (string) => {
            this.pSearch = string
          })
        }
      }
    </script>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-08 06:52:43

可以将标题和正文包装在对象中。

代码语言:javascript
运行
复制
addPost() {
      const post = {
        title: this.createTitle,
        body: this.createBody
      }
      eventEmitter.$emit('postAdd', post)
    }

然后像平常一样听

代码语言:javascript
运行
复制
created(){
  eventEmitter.$on('postAdd', (post) => {
    console.log(post)
    // do whatever you want
  })
}
票数 2
EN

Stack Overflow用户

发布于 2019-05-08 07:04:15

我没有研究vue js,但同意@ittus的回答。您可以创建一个对象,它由您想要跨组件共享的所需数据组成,并将其作为事件数据传递。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56035001

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档