Maison > interface Web > js tutoriel > le corps du texte

Analyse du transfert de valeur et de l'utilisation des emplacements des composants parent-enfant dans Vue

php中世界最好的语言
Libérer: 2018-06-01 10:37:07
original
1459 Les gens l'ont consulté

Cette fois, je vais vous apporter une analyse du transfert de valeur et de l'utilisation des emplacements du composant parent-enfant dans Vue. Quelles sont les précautions pour le transfert de valeur du composant parent-enfant et l'utilisation des emplacements dans Vue. .Ce qui suit est un cas pratique.

1. Les composants parent-enfant transmettent des valeurs

nbsp;html>


  <meta>
  <title>父子组件传值</title>
  <style> 
  </style>
  <script></script>


  <p> 
    <counter></counter>
    <counter></counter>
    </p><p>{{total}}</p> 
    <validate-content></validate-content>
  
  <script> 
   //父组件向子组件传值用 props ,加:号后传递的为js表达式,示例中则为数字,不加:号代表的是字符串 
   var counter = { //局部注册 
     props:[&#39;count&#39;],
     data:function(){//在子组件中定义数据,data不能是对象,必须是一个函数。
       return {
         number:this.count
       }
     },
     template:&#39;<p @click="handleClick2">{{number}}&#39;,
     methods:{
      handleClick2:function(){
        this.number ++;
        //this.count++; 父组件可以传值给子组件,但子组件不可以修改父组件属性,这里这么写会报错。
        this.$emit("numberchange",this.number);//子组件向父组件传递事件,值
      }
    } 
   }
   var validateContent = {
    props:{
      //content:[Number,String] //组件参数校验,可以多选
      content:{//组件参数校验
        type:String,
        required:true,
        default:"default value",
        validator:function(value){
          return value.length > 5
        }
      }
     },
     template:&#39;<p >{{content}}&#39;,
   }
   var vm = new Vue({
     el:&#39;#root&#39;,
     data:{
       total:0
     },
     methods:{ 
      handleChange:function(number){ 
        console.log(number)
        // this.total +=1;
      }
     },
     components:{
       counter, //局部注册要在根节点注册组件
       validateContent
     }
   })
  </script>

Copier après la connexion

2. composants enfants

Jetons d'abord un coup d'œil à un exemple

  <p> 
    <child><p>Qin</p></child>
  </p>
  <script> 
   let child = {
     template :`<p>
           <p>hello world 
        `
   }
   var vm = new Vue({
     el:&#39;#root&#39;,
     components:{
       child
     } 
   })
  </script>
Copier après la connexion

Ouvrez la visionneuse et vérifiez-la

Analyse du transfert de valeur et de lutilisation des emplacements des composants parent-enfant dans Vue

Découvrez que Qin a disparu

<p>Qin</p>1

Consultez la documentation officielle, https://cn.vuejs.org/v2/guide/components- slots.html

Nous obtenons une conclusion : si l'enfant ne contient pas d'élément , tout contenu qui y est transmis sera supprimé

Nous avons ajouté le slot

  <p> 
    <child><p>Qin</p></child>
  </p>
  <script> 
   let child = {
     template :`<p>
           <p>hello world
           <slot>
        ` 
   }
   var vm = new Vue({
     el:&#39;#root&#39;,
     components:{
       child
     } 
   })
  </script>
Copier après la connexion

et j'ai constaté que Qin peut être affiché normalement et que l'emplacement sera remplacé par le fragment analysé

Analyse du transfert de valeur et de lutilisation des emplacements des composants parent-enfant dans VueRendu

  <p> 
    <child></child>
  </p>
  <script> 
   let child = {
     template :`<p>
           <p>hello world
           <slot>default value
        `
   }
   var vm = new Vue({
     el:&#39;#root&#39;,
     components:{
       child
     } 
   })
  </script>
Copier après la connexion

Emplacement nomméAnalyse du transfert de valeur et de lutilisation des emplacements des composants parent-enfant dans Vue

Si vous souhaitez utiliser plusieurs emplacements, jetons d'abord un coup d'œil à l'effet :

On constate qu'il y a plusieurs en-têtes et pieds de page. Nous devons résoudre ce problème. Nous devons utiliser des emplacements nommés
  <p> 
    <child>
      <header>This is header</header>
      <footer>This is footer</footer> 
    </child>
  </p>
  <script> 
   let child = {
     template :
       `<p> 
           <slot>
           <p>Main content
           <slot>
        `
   }
   var vm = new Vue({
     el:&#39;#root&#39;,
     components:{
       child
     } 
   })
  </script>
Copier après la connexion

Nous modifions le code comme suit : Analyse du transfert de valeur et de lutilisation des emplacements des composants parent-enfant dans Vue

Vous pouvez voir que l'affichage est normal

  <p> 
    <child>
      <header>This is header</header>
      <footer>This is footer</footer> 
    </child>
  </p>
  <script> 
   let child = {
     template :
       `<p> 
           <slot name="header">
           <p>Main content
           <slot name="footer">
        `
   }
   var vm = new Vue({
     el:&#39;#root&#39;,
     components:{
       child
     } 
   })
  </script>
Copier après la connexion
Je le crois Après avoir lu le cas dans cet article, vous maîtrisez la méthode. Pour des informations plus intéressantes, veuillez prêter attention à. d'autres articles connexes sur le site PHP chinois !

Analyse du transfert de valeur et de lutilisation des emplacements des composants parent-enfant dans VueLecture recommandée :

Comment utiliser VeeValidate pour effectuer une vérification de formulaire dans le projet vue

Comment utiliser vue pour mettre en œuvre 2048 Mini Games

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!