详解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 相关文章推荐
认识延迟时间为0的setTimeout
May 16 Javascript
Javascript 自定义类型方法小结
Mar 02 Javascript
非常棒的10款jQuery 幻灯片插件
Jun 14 Javascript
jQuery随便控制任意div隐藏的方法
Jun 28 Javascript
原生js实现移动开发轮播图、相册滑动特效
Apr 17 Javascript
基于jquery实现智能提示控件intellSeach.js
Mar 17 Javascript
浅谈JavaScript中小数和大整数的精度丢失
May 31 Javascript
js实现股票实时刷新数据案例
May 14 Javascript
JS沙箱模式实例分析
Sep 04 Javascript
js实现贪吃蛇小游戏
Oct 29 Javascript
vue quill editor 使用富文本添加上传音频功能
Jan 14 Javascript
Vue将props值实时传递 并可修改的操作
Aug 09 Javascript
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
PHP4引用文件语句的对比
2006/10/09 PHP
PHP利用REFERER根居访问来地址进行页面跳转
2013/09/28 PHP
PHP中使用循环实现的金字塔图形
2014/11/08 PHP
php判断一个数组是否为有序的方法
2015/03/27 PHP
PHP中的数组处理函数实例总结
2016/01/09 PHP
PHP动态生成指定大小随机图片的方法
2016/03/25 PHP
thinkphp3.2实现上传图片的控制器方法
2016/04/28 PHP
phpstudy2020搭建站点的实现示例
2020/10/30 PHP
FLASH 广告之外的链接
2008/12/16 Javascript
jQuery对象和Javascript对象之间转换的实例代码
2013/03/20 Javascript
基于SVG的web页面图形绘制API介绍及编程演示
2013/06/28 Javascript
js(jQuery)获取时间的方法及常用时间类搜集
2013/10/23 Javascript
jquery及js实现动态加载js文件的方法
2016/01/21 Javascript
jQuery实现表格隔行及滑动,点击时变色的方法【测试可用】
2016/08/20 Javascript
基于JavaScript实现前端文件的断点续传
2016/10/17 Javascript
详解Node.js中exports和module.exports的区别
2017/04/19 Javascript
jQuery实现动态删除LI的方法
2017/05/30 jQuery
node.js+captchapng+jsonwebtoken实现登录验证示例
2017/08/17 Javascript
全面了解JavaScript的作用域链
2019/04/03 Javascript
使用 webpack 插件自动生成 vue 路由文件的方法
2019/08/20 Javascript
JS自定义滚动条效果
2020/03/13 Javascript
JS原型prototype和__proto__用法实例分析
2020/03/14 Javascript
vuex实现购物车的增加减少移除
2020/06/28 Javascript
原生js生成图片验证码
2020/10/11 Javascript
python使用urllib2实现发送带cookie的请求
2015/04/28 Python
CentOS 7下安装Python 3.5并与Python2.7兼容并存详解
2017/07/07 Python
Python实现繁?转为简体的方法示例
2018/12/18 Python
python读取各种文件数据方法解析
2018/12/29 Python
python读取hdfs并返回dataframe教程
2020/06/05 Python
HTML5新表单元素_动力节点Java学院整理
2017/07/12 HTML / CSS
医科大学生毕业的自我评价分享
2013/11/12 职场文书
2015年元旦文艺汇演主持词
2014/03/26 职场文书
小学生演讲稿大全
2014/04/25 职场文书
小学优秀班集体申报材料
2014/05/25 职场文书
初中语文教师研修日志
2015/11/13 职场文书
python实现调用摄像头并拍照发邮箱
2021/04/27 Python