VueJS, передать данные от компонента к другому - PullRequest
0 голосов
/ 01 января 2019

Я делаю что-то новое для меня, и у меня есть проблема .. Итак, давайте объясним немного больше ..

У меня есть Компонент с именем components/HomeComponent.vue

Вот:

HomeComponent.vue

<script>
export default {
  name: "HomeComponent",
  data() {
    posts: [
      { title: "Hello", body: "Some text" },
      { title: "Hello", body: "Some text" },
      { title: "Hello", body: "Some text" },
      { title: "Hello", body: "Some text" }
    ];
  }
};
</script>

, и у меня есть мое "представление" views/Home.vue

Home.vue

<template>
  <!-- Blog Entries Column -->
  <div class="col-md-8">
    <h1 class="my-4">Статии</h1>

    <!-- Blog Post -->
    <div class="card mb-4" v-for="post in posts">
      <div class="card-body">
        <h2 class="card-title">{{ post.title }}</h2>
        <p class="card-text">{{ post.body }}</p>
        <a href="#" class="btn btn-primary">Read More &rarr;</a>
      </div>
      <div class="card-footer text-muted">
        Posted on January 1, 2017 by
        <a href="#">xxx</a>
      </div>
    </div>
  </div>
</template>

Итак, я хочу получить доступ к сообщениям в моем Home.vue и сделать цикл ... Как это сделать?Спасибо за совет!:)

<script>
// @ is an alias to /src
import HomeComponent from "@/components/HomeComponent.vue";

export default {
  name: "home",
  components: {
    HomeComponent
  },
};
</script>

Ответы [ 4 ]

0 голосов
/ 02 января 2019

Вы определили данные, относящиеся к компоненту.Если вы хотите распространять / передавать данные в разные компоненты / представления, пожалуйста, сохраняйте данные в app.vue и обращайтесь к данным непосредственно внутри представления / компонента.Еще один способ получить доступ к данным в централизованном месте. Вы можете использовать VueX (хранилище данных), уровень его продвижения вперед для управления огромным объемом данных.

0 голосов
/ 01 января 2019

Данные передаются дочерним компонентам с помощью реквизита.Вы можете использовать emit для передачи его родительскому компоненту.

data() {
  posts: [
    { title: "Hello", body: "Some text" },
    { title: "Hello", body: "Some text" },
    { title: "Hello", body: "Some text" },
    { title: "Hello", body: "Some text" }
  ];
},
mounted () {
  this.$emit('posts', this.posts);
}
  

Затем на Home.vue вы прослушиваете изменение события, используя это

<template>
  <div>
    <HomeComponent v-on:posts="getPosts($event)"></HomeComponent>
  </div>
</template>
<script>
  export default {
    data () {
      return {
        posts: []
      }
    },
    methods: {
      getPosts(e) {
        this.posts = e; 
      }
    }
  }
</script>
0 голосов
/ 01 января 2019

HomeComponent.vue

<template>
  <div>
    <slot :posts="posts"></slot>
  </div>
</template>
<script>
 export default {
 name: "HomeComponent",
 data() {
  posts: [
    { title: "Hello", body: "Some text" },
    { title: "Hello", body: "Some text" },
    { title: "Hello", body: "Some text" },
    { title: "Hello", body: "Some text" }
 ];
}
};
</script>

Home.vue

<template>
    <div>
        <home-component slot-scope="{ posts }">
            <div class="card mb-4" v-for="post in posts">
               <div class="card-body">
                 <h2 class="card-title">{{ post.title }}</h2>
                 <p class="card-text">{{ post.body }}</p>
                 <a href="#" class="btn btn-primary">Read More &rarr;</a>
               </div>
               <div class="card-footer text-muted">
                 Posted on January 1, 2017 by
                 <a href="#">xxx</a>
               </div>
             </div> 
        </home-component>
    </div>
</template>
<script>
import HomeComponent from "@/components/HomeComponent.vue";
export default {
  name: "home",
  components: {
    HomeComponent
  },
};
</script>

https://medium.com/binarcode/understanding-scoped-slots-in-vue-js-db5315a42391 https://vuejs.org/v2/guide/components-slots.html#Scoped-Slots

0 голосов
/ 01 января 2019

Вы должны передать свои данные в качестве реквизита компоненту Home.Более подробную информацию можно найти здесь .Но вот быстрое решение вашей проблемы.

Comp.vue

<template>
  <!-- Blog Entries Column -->
  <div class="col-md-8">
    <h1 class="my-4">Статии</h1>

    <!-- Blog Post -->
    <div class="card mb-4" v-for="post in posts">
      <div class="card-body">
        <h2 class="card-title">{{ post.title }}</h2>
        <p class="card-text">{{ post.body }}</p>
        <a href="#" class="btn btn-primary">Read More &rarr;</a>
      </div>
      <div class="card-footer text-muted">
        Posted on January 1, 2017 by
        <a href="#">xxx</a>
      </div>
    </div>
  </div>
</template>

<script>
 export default {
   props:['posts']
 }
</script>

HomePage.vue

<template>
  <comp :posts="posts"></comp>
</template>

<script>
import Comp from './components/Comp.vue'
export default {
  name: "HomeComponent",
  components: {
    'comp': Comp
  },
  data() {
    posts: [
      { title: "Hello", body: "Some text" },
      { title: "Hello", body: "Some text" },
      { title: "Hello", body: "Some text" },
      { title: "Hello", body: "Some text" }
    ];
  }
};
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...