详解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 相关文章推荐
需要做特殊处理的DOM元素属性的访问
Nov 05 Javascript
jquery实现网站超链接和图片提示效果
Mar 21 Javascript
jQuery回车实现登录简单实现
Aug 20 Javascript
jQuery判断checkbox(复选框)是否被选中以及全选、反选实现代码
Feb 21 Javascript
超级简单实现JavaScript MVC 样式框架
Mar 24 Javascript
javascript性能优化之DOM交互操作实例分析
Dec 12 Javascript
js判断图片加载完成后获取图片实际宽高的方法
Feb 25 Javascript
node+vue实现用户注册和头像上传的实例代码
Jul 20 Javascript
分享Bootstrap简单表格、表单、登录页面
Aug 04 Javascript
JavaScript解决浮点数计算不准确问题的方法分析
Jul 09 Javascript
使用pkg打包ThinkJS项目的方法步骤
Dec 30 Javascript
vue elementui 实现搜索栏公共组件封装的实例代码
Jan 20 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
php 地区分类排序算法
2013/07/01 PHP
CodeIgniter框架URL路由总结
2014/09/03 PHP
PHP基于phpqrcode生成带LOGO图像的二维码实例
2015/07/10 PHP
yii2实现根据时间搜索的方法
2016/05/25 PHP
Windows8下搭建Node.js开发环境教程
2014/09/03 Javascript
AngularJS基础学习笔记之指令
2015/05/10 Javascript
jQuery实现固定在网页顶部的菜单效果代码
2015/09/02 Javascript
jQuery插件cxSelect多级联动下拉菜单实例解析
2016/06/24 Javascript
nodeJS实现简单网页爬虫功能的实例(分享)
2017/06/08 NodeJs
vue.js获得当前元素的文字信息方法
2018/03/09 Javascript
js实现二级菜单点击显示当前内容效果
2018/04/28 Javascript
vue-cli项目代理proxyTable配置exclude的方法
2018/09/20 Javascript
js获取本日、本周、本月的时间代码
2020/02/01 Javascript
Node.js API详解之 repl模块用法实例分析
2020/05/25 Javascript
微信小程序实现页面监听自定义组件的触发事件
2020/11/01 Javascript
Vue路由权限控制解析
2020/11/09 Javascript
Python的面向对象编程方式学习笔记
2016/07/12 Python
浅谈python中的变量默认是什么类型
2016/09/11 Python
Python xlwt设置excel单元格字体及格式
2020/04/18 Python
python实现kNN算法
2017/12/20 Python
python 字典中文key处理,读取,比较方法
2018/07/06 Python
python创建文件备份的脚本
2018/09/11 Python
python3中利用filter函数输出小于某个数的所有回文数实例
2019/11/24 Python
python通过函数名调用函数的几种场景
2020/09/23 Python
Python可视化工具如何实现动态图表
2020/10/23 Python
使用Python封装excel操作指南
2021/01/29 Python
印度首选时尚目的地:Reliance Trends
2018/01/17 全球购物
捐助贫困学生倡议书
2014/05/16 职场文书
护士工作失误检讨书
2014/09/14 职场文书
吃空饷专项整治方案
2014/10/27 职场文书
解除劳动关系协议书2篇
2014/11/28 职场文书
八达岭长城导游词
2015/01/30 职场文书
幼儿园小班开学寄语
2015/05/27 职场文书
2015年入党积极分子培养考察意见
2015/08/12 职场文书
决心书格式范文
2015/09/23 职场文书
MySQL的意向共享锁、意向排它锁和死锁
2022/07/15 MySQL