vue组件详解之使用slot分发内容,js数据传递以及

作者: 韦德国际1946国际网址  发布:2019-06-01

壹、组件间的数据传递

vue组件详解之使用slot分发内容,js数据传递以及数额分发slot。详解vue.js数据传递以及数额分发slot,详解vue.js分发slot

壹、组件间的多寡传递

1.父零部件获取子组件的数量  

*子组件把自个儿的数码,发送到父级

*vm.$emit(事件名,数据);

*v-on: @

亲自去做用法:当点击send开关的时候,“11一”形成“作者是子组件的数据”

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>父级获取子级的数据</title>
  <script src="bower_components/vue/dist/vue.js"></script>
  <style>
  </style>
</head>
<body>
<div>
  <aaa>
  </aaa>
</div>
<template>
  我是父级 -> {{msg}}
  //自动调用get方法,@child-msg和下面的this.$emit('child-msg',this.a)相对应
  <bbb @child-msg="get"></bbb>
</template>
<template>
  <h3>子组件-</h3>
  <input type="button" value="send" @click="send">
</template>
<script>
  var vm=new Vue({
    el:'#box',
    data:{
      a:'aaa'
    },
    components:{
      'aaa':{
        data:function(){
          return {
            msg:111,
            msg2:'我是父组件的数据'
          }
        },
        template:'#aaa',
        methods:{
          //这里的msg实际上就是子组件传递给父组件的数据
          get:function(msg){
            this.msg=msg;
          }
        },
        components:{
          'bbb':{
            data:function(){
              return {
                a:'我是子组件的数据'
              }
            },
            template:'#bbb',
            methods:{
              send:function(){
                this.$emit('child-msg',this.a);
              }
            }
          }
        }
      }
    }
  });
</script>
</body>
</html>

2、子组件获取父组件的数码

在调用子组件:

<bbb :m="数据"></bbb>

子组件之内:

props:['m','myMsg']
props:{
'm':String,
'myMsg':Number
        }

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>自己获取父级的数据</title>
  <script src="bower_components/vue/dist/vue.js"></script>
  <style>
  </style>
</head>
<body>
<div>
  <div>{{a}}</div>
  <aaa>
    {{msg}}
  </aaa>
</div>

<template>
  <h1>11111</h1>
  <bbb :mmm="msg2" :my-msg="msg"></bbb>
</template>
<script>
  var vm=new Vue({
    el:'#box',
    data:{
      a:'a'
    },
    components:{
      'aaa':{
        data:function(){
          return {
            msg:111,
            msg2:'我是父组件的数据'
          }
        },
        template:'#aa',
        components:{
          'bbb':{
            props:{
              'mmm':String,
              'myMsg':Number
            },
            template:'<h3>我是bbb组件->{{mmm}} <br> {{myMsg}}</h3>'
          }
        }
      }
    }
  });

</script>
</body>
</html>

运维结果:

图片 1

2、内容分发:

Vue.js提供了1种混合父组件内容与子组件本人模版的方式:slot,用来占二个职责

一、基本用法 

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>slot保留原来的位置</title>
  <script src="bower_components/vue/dist/vue.js"></script>
  <style>
  </style>

</head>
<body>
<div>
  <aaa>
    <ul>
      <li>1111</li>
      <li>2222</li>
      <li>3333</li>
    </ul>
  </aaa>
  <hr>
  <aaa>
  </aaa>
</div>
<template>
  <h1>xxxx</h1>
  <slot>这是默认的情况</slot>
  <p>welcome vue</p>
</template>

<script>
  var vm=new Vue({
    el:'#box',
    data:{
      a:'aaa'
    },
    components:{
      'aaa':{
        template:'#aaa'
      }
    }
  });

</script>
</body>
</html>

运维结果:ul标签里面包车型大巴剧情从未被掩盖,要是不应用slot,ul标签里的源委将会被覆盖

图片 2

2、slot的name属性 

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>slot中name属性的使用</title>
  <script src="bower_components/vue/dist/vue.js"></script>
  <style>
  </style>
</head>
<body>
<div>
  <aaa>
    <ul slot="ul-slot">    //这里slot的名字要与下面slot中name属性相对应
      <li>1111</li>
      <li>2222</li>
      <li>3333</li>
    </ul>
    <ol slot="ol-slot">    //用法同上
      <li>111</li>
      <li>222</li>
      <li>333</li>
    </ol>
  </aaa>
  <hr>
  <aaa>
  </aaa>
</div>
<template>  
  <h1>xxxx</h1>
  <slot name="ol-slot">这是默认的情况</slot>      //设置name属性,给slot命名
  <p>welcome vue</p>
  <slot name="ul-slot">这是默认的情况2</slot>
</template>

<script>
  var vm=new Vue({
    el:'#box',
    data:{
      a:'aaa'
    },
    components:{
      'aaa':{
        template:'#aaa'
      }
    }
  });

</script>
</body>
</html>

 运营结果:

图片 3

一、组件间的数额传递 一.父组件获取子组件的数据 *子组件把自身的数量,发送到父...

一、什么是slot

一、什么是slot

1.父零件获取子组件的数码  

在采用组件时,大家平时要像这样组合它们:

在利用组件时,我们平常要像这么组合它们:

*子组件把团结的多寡,发送到父级

<app>
 <app-header></app-header>
 <app-footer></app-footer>
</app>
<app>
  <app-header></app-header>
  <app-footer></app-footer>
</app>

*vm.$emit(事件名,数据);

当要求让组件组合使用,混合父组件的原委与子组件的模版时,就能够用到slot , 这几个进程叫作内容分发( transclusion )。

当必要让组件组合使用,混合父组件的原委与子组件的模版时,就能够用到slot , 这几个进度叫作内容分发( transclusion )。

*v-on: @

小心两点:

瞩目两点:

示范用法:当点击send按键的时候,“111”形成“小编是子组件的数额”

一.< app>组件不晓得它的挂载点会有哪些内容。挂载点的内容是由<app >的父组件决定的。

一.< app>组件不知底它的挂载点会有哪些内容。挂载点的源委是由<app >的父组件决定的。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>父级获取子级的数据</title>
  <script src="bower_components/vue/dist/vue.js"></script>
  <style>
  </style>
</head>
<body>
<div>
  <aaa>
  </aaa>
</div>
<template>
  我是父级 -> {{msg}}
  //自动调用get方法,@child-msg和下面的this.$emit('child-msg',this.a)相对应
  <bbb @child-msg="get"></bbb>
</template>
<template>
  <h3>子组件-</h3>
  <input type="button" value="send" @click="send">
</template>
<script>
  var vm=new Vue({
    el:'#box',
    data:{
      a:'aaa'
    },
    components:{
      'aaa':{
        data:function(){
          return {
            msg:111,
            msg2:'我是父组件的数据'
          }
        },
        template:'#aaa',
        methods:{
          //这里的msg实际上就是子组件传递给父组件的数据
          get:function(msg){
            this.msg=msg;
          }
        },
        components:{
          'bbb':{
            data:function(){
              return {
                a:'我是子组件的数据'
              }
            },
            template:'#bbb',
            methods:{
              send:function(){
                this.$emit('child-msg',this.a);
              }
            }
          }
        }
      }
    }
  });
</script>
</body>
</html>

贰.<app> 组件异常的大概有它和谐的模板。

2.<app> 组件很也会有它和睦的模版。

二、子组件获取父组件的数量

props 传递数据、events 触发事件和slot 内容分发就组成了Vue 组件的三 个API 来源,再繁杂的机件也是由那三 部分构成的。

props 传递数据、events 触发事件和slot 内容分发就整合了Vue 组件的3 个API 来源,再繁杂的组件也是由那三 部分构成的。

在调用子组件:

 二、作用域

 

<bbb :m="数据"></bbb>

<child-component>
 {{ message }}
</child-component>

 二、作用域

子组件之内:

那边的message 便是三个slot ,不过它绑定的是父组件的多寡,而不是组件<child-component>的数据。

<child-component>
  {{ message }}
</child-component>
props:['m','myMsg']
props:{
'm':String,
'myMsg':Number
        }


<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>自己获取父级的数据</title>
  <script src="bower_components/vue/dist/vue.js"></script>
  <style>
  </style>
</head>
<body>
<div>
  <div>{{a}}</div>
  <aaa>
    {{msg}}
  </aaa>
</div>

<template>
  <h1>11111</h1>
  <bbb :mmm="msg2" :my-msg="msg"></bbb>
</template>
<script>
  var vm=new Vue({
    el:'#box',
    data:{
      a:'a'
    },
    components:{
      'aaa':{
        data:function(){
          return {
            msg:111,
            msg2:'我是父组件的数据'
          }
        },
        template:'#aa',
        components:{
          'bbb':{
            props:{
              'mmm':String,
              'myMsg':Number
            },
            template:'<h3>我是bbb组件->{{mmm}} <br> {{myMsg}}</h3>'
          }
        }
      }
    }
  });

</script>
</body>
</html>

父组件模板的剧情是在父组件功能域内编写翻译,子组件模板的源委是在子组件成效域内编写翻译。如:

这里的message 正是1个slot ,不过它绑定的是父组件的数量,而不是组件<child-component>的数目。

本文由韦德国际1946发布于韦德国际1946国际网址,转载请注明出处:vue组件详解之使用slot分发内容,js数据传递以及

关键词: