详解vue.js数据传递以及数据分发slot


Posted in Javascript onJanuary 20, 2018

一、组件间的数据传递

1.父组件获取子组件的数据

*子组件把自己的数据,发送到父级

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

*v-on: @

示例用法:当点击send按钮的时候,“111”变成“我是子组件的数据”

<!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>
  <span>我是父级 -> {{msg}}</span>
  //自动调用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>

运行结果:

详解vue.js数据传递以及数据分发slot

二、内容分发:

Vue.js提供了一种混合父组件内容与子组件自己模版的方式:slot,用来占一个位置

1、基本用法 

<!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标签里的内容将会被覆盖

详解vue.js数据传递以及数据分发slot

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>

 运行结果:

详解vue.js数据传递以及数据分发slot

Javascript 相关文章推荐
js中eval()函数和trim()去掉字符串左右空格应用
Feb 02 Javascript
js实现简洁的TAB滑动门效果代码
Sep 06 Javascript
javascript仿京东导航左侧分类导航下拉菜单效果
Nov 25 Javascript
bootstrap table之通用方法( 时间控件,导出,动态下拉框, 表单验证 ,选中与获取信息)代码分享
Jan 24 Javascript
Angular2使用Angular CLI快速搭建工程(一)
May 21 Javascript
详解vue.js移动端导航navigationbar的封装
Jul 05 Javascript
基于JavaScript实现前端数据多条件筛选功能
Aug 19 Javascript
vue 通过下拉框组件学习vue中的父子通讯
Dec 19 Javascript
自定义Vue中的v-module双向绑定的实现
Apr 17 Javascript
vue如何在项目中调用腾讯云的滑动验证码
Jul 15 Javascript
uni-app使用countdown插件实现倒计时
Nov 01 Javascript
Vuex实现简单购物车
Jan 10 Vue.js
Angular2整合其他插件的方法
Jan 20 #Javascript
详解Angular结合zTree异步加载节点数据
Jan 20 #Javascript
javascript数组拍平方法总结
Jan 20 #Javascript
node.js文件上传重命名以及移动位置的示例代码
Jan 19 #Javascript
详解Node.js模板引擎Jade入门
Jan 19 #Javascript
JS实现碰撞检测的方法分析
Jan 19 #Javascript
angular1配合gulp和bower的使用教程
Jan 19 #Javascript
You might like
PHP截取中文字符串的问题
2006/07/12 PHP
PHP连接MongoDB示例代码
2012/09/06 PHP
PHP怎么实现网站保存快捷方式方便用户随时浏览
2013/08/15 PHP
tp5(thinkPHP5)操作mongoDB数据库的方法
2018/01/20 PHP
thinkPHP中U方法加密传递参数功能示例
2018/05/29 PHP
JavaScript的目的分析
2007/01/05 Javascript
Jquery Ajax学习实例6 向WebService发出请求,返回DataSet(XML) 异步调用
2010/03/18 Javascript
Tinymce+jQuery.Validation使用产生的BUG
2010/03/29 Javascript
让jQuery与其他JavaScript库并存避免冲突的方法
2013/12/23 Javascript
通过正则表达式实现表单验证是否为中文
2014/02/18 Javascript
jQuery实现下拉框功能实例代码
2016/05/06 Javascript
bootstrap下拉列表与输入框组结合的样式调整
2016/10/08 Javascript
jQuery中的on与bind绑定事件区别实例详解
2017/02/28 Javascript
backbone简介_动力节点Java学院整理
2017/07/14 Javascript
JSON对象转化为字符串详解
2017/08/11 Javascript
JavaScript事件委托原理与用法实例分析
2018/06/07 Javascript
layui获取选中行数据的实例讲解
2018/08/19 Javascript
nodejs实现的http、https 请求封装操作示例
2020/02/06 NodeJs
uniapp实现可以左右滑动导航栏
2020/10/21 Javascript
原生JS实现音乐播放器
2021/01/26 Javascript
Python使用urllib模块的urlopen超时问题解决方法
2014/11/08 Python
Python3中的真除和Floor除法用法分析
2016/03/16 Python
完美解决python遍历删除字典里值为空的元素报错问题
2016/09/11 Python
python删除过期log文件操作实例解析
2018/01/31 Python
pycharm设置鼠标悬停查看方法设置
2019/07/29 Python
Python爬取知乎图片代码实现解析
2019/09/17 Python
Python动态导入模块和反射机制详解
2020/02/18 Python
利用CSS3实现圆角的outline效果的教程
2015/06/05 HTML / CSS
mui几种页面跳转方式对比总结概括
2017/08/18 HTML / CSS
canvas实现烟花的示例代码
2020/01/16 HTML / CSS
美国机场停车位预订:About Airport Parking
2018/03/26 全球购物
大学计划书范文800字
2014/08/14 职场文书
2014年人力资源部工作总结
2014/11/19 职场文书
学习保证书怎么写
2015/02/26 职场文书
品牌形象定位,全面分析
2019/07/23 职场文书
python 镜像环境搭建总结
2022/09/23 Python