Je fais quelque chose de nouveau pour moi et j'ai un problème .. Alors expliquons un peu plus ..
J'ai un composant avec le nom components/HomeComponent.vue
Ici est:
HomeComponent.vue
<script> // @ is an alias to /src import HomeComponent from "@/components/HomeComponent.vue"; export default { name: "home", components: { HomeComponent }, }; </script>
et j'ai ma "vue" vues / 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 →</a> </div> <div class="card-footer text-muted"> Posted on January 1, 2017 by <a href="#">xxx</a> </div> </div> </div> </template>
Je souhaite donc accéder aux messages de mon Home.vue et make for loop .. Comment faire ça?
Merci pour les conseils! :)
<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>
4 Réponses :
Vous devrez transmettre vos données en tant qu'accessoires au composant Home. Plus d'informations peuvent être trouvées ici . Mais voici une solution rapide à votre problème.
<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>
HomePage.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 →</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>
Les données sont transmises aux composants enfants à l'aide d'accessoires. Vous pouvez utiliser emit pour le transmettre au composant parent.
<template> <div> <HomeComponent v-on:posts="getPosts($event)"></HomeComponent> </div> </template> <script> export default { data () { return { posts: [] } }, methods: { getPosts(e) { this.posts = e; } } } </script>
Ensuite sur Home.vue, vous écoutez un changement d'événement en utilisant ceci
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); }
XXX
<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 →</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
Vous avez défini des données spécifiques au composant. Si vous souhaitez diffuser / transmettre des données dans différents composants / vues, veuillez conserver les données dans app.vue et accéder aux données directement dans la vue / le composant. Une autre façon d'accéder aux données dans un emplacement centralisé, vous pouvez utiliser VueX (magasin de données), son niveau d'avance en bits pour manipuler une énorme capacité de données.
Non .. mon HomeComponent contient du html que je ne l'ai pas inclus ici