vue中父子组件注意事项,传值及slot应用技巧


Posted in Javascript onMay 09, 2018

一.父子组件传值

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>父子组件传值</title>
  <style> 
  </style>
  <script src="./vue.js"></script>
</head>
<body>
  <div id="root"> 
    <counter :count="0" @numberchange="handleChange"></counter>
    <counter :count="0" @numberchange="handleChange"></counter>
    <div>{{total}}</div> 
    <validate-content content="hello world"></validate-content>
  </div>
  <script> 
   //父组件向子组件传值用 props ,加:号后传递的为js表达式,示例中则为数字,不加:号代表的是字符串 
   var counter = { //局部注册 
     props:['count'],
     data:function(){//在子组件中定义数据,data不能是对象,必须是一个函数。
       return {
         number:this.count
       }
     },
     template:'<div @click="handleClick2">{{number}}</div>',
     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:'<div >{{content}}</div>',
   }
   var vm = new Vue({
     el:'#root',
     data:{
       total:0
     },
     methods:{ 
      handleChange:function(number){ 
        console.log(number)
        // this.total +=1;
      }
     },
     components:{
       counter, //局部注册要在根节点注册组件
       validateContent
     }
   })
  </script>
</body>
</html>

二.父组件向子组件传递DOM

先看一个示例

<body>
  <div id="root"> 
    <child><p>Qin</p></child>
  </div>
  <script> 
   let child = {
     template :`<div>
           <p>hello world</p> 
        </div>`
   }
   var vm = new Vue({
     el:'#root',
     components:{
       child
     } 
   })
  </script>
</body>

打开查看器查看一下

vue中父子组件注意事项,传值及slot应用技巧

发现Qin不见了

<p>Qin</p>1

查看官方文档 ,   https://cn.vuejs.org/v2/guide/components-slots.html 

我们得出结论:如果 child 没有包含一个 < slot > 元素,则任何传入它的内容都会被抛弃

 我们加入插槽

<body>
  <div id="root"> 
    <child><p>Qin</p></child>
  </div>
  <script> 
   let child = {
     template :`<div>
           <p>hello world</p>
           <slot></slot>
        </div>` 
   }
   var vm = new Vue({
     el:'#root',
     components:{
       child
     } 
   })
  </script>
</body>

发现Qin能正常显示,且slot将会被替换为解析后的片段 < p > Qin < /p >

vue中父子组件注意事项,传值及slot应用技巧

当父组件不向子组件传值的时候,slot还可以作为父组件默认值出现

<body>
  <div id="root"> 
    <child></child>
  </div>
  <script> 
   let child = {
     template :`<div>
           <p>hello world</p>
           <slot>default value</slot>
        </div>`
   }
   var vm = new Vue({
     el:'#root',
     components:{
       child
     } 
   })
  </script>
</body>

效果图

vue中父子组件注意事项,传值及slot应用技巧

具名插槽

 如果想使用多个插槽,我们先看看效果:

<body>
  <div id="root"> 
    <child>
      <header>This is header</header>
      <footer>This is footer</footer> 
    </child>
  </div>
  <script> 
   let child = {
     template :
       `<div> 
           <slot></slot>
           <p>Main content</p>
           <slot></slot>
        </div>`
   }
   var vm = new Vue({
     el:'#root',
     components:{
       child
     } 
   })
  </script>
</body>

vue中父子组件注意事项,传值及slot应用技巧

发现出现了多个header和footer,要解决这个问题就要用到具名插槽  

我们修改代码如下:

<body>
  <div id="root"> 
    <child>
      <header slot="header">This is header</header>
      <footer slot="footer">This is footer</footer> 
    </child>
  </div>
  <script> 
   let child = {
     template :
       `<div> 
           <slot name="header"></slot>
           <p>Main content</p>
           <slot name="footer"></slot>
        </div>`
   }
   var vm = new Vue({
     el:'#root',
     components:{
       child
     } 
   })
  </script>
</body>

vue中父子组件注意事项,传值及slot应用技巧 

可以看到显示正常了

总结

以上所述是小编给大家介绍的vue中父子组件注意事项,传值及slot应用技巧,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
jquery学习笔记 用jquery实现无刷新登录
Aug 08 Javascript
在网站上应该用的30个jQuery插件整理
Nov 03 Javascript
javascript表单验证 - Parsley.js使用和配置
Jan 25 Javascript
Firefox和IE兼容性问题及解决方法总结
Oct 08 Javascript
Bootstrap每天必学之基础排版
Nov 20 Javascript
jQuery stop()用法实例详解
Jul 28 Javascript
微信小程序 WXDropDownMenu组件详解及实例代码
Oct 24 Javascript
Vue中计算属性computed的示例解读
Jul 26 Javascript
基于webpack 实用配置方法总结
Sep 28 Javascript
JS中双击和单击事件冲突的解决方法
Apr 09 Javascript
微信小程序实现简单文字跑马灯
May 26 Javascript
jquery实现简易验证插件封装
Sep 13 jQuery
vue中的provide/inject的学习使用
May 09 #Javascript
详解Vue 多级组件透传新方法provide/inject
May 09 #Javascript
自定义vue组件发布到npm的方法
May 09 #Javascript
React Navigation 使用中遇到的问题小结
May 08 #Javascript
官方推荐react-navigation的具体使用详解
May 08 #Javascript
JavaScript callback回调函数用法实例分析
May 08 #Javascript
JavaScript累加、迭代、穷举、递归等常用算法实例小结
May 08 #Javascript
You might like
15种PHP Encoder的比较
2007/04/17 PHP
查找mysql字段中固定字符串并替换的几个方法
2012/09/23 PHP
php遍历目录与文件夹的多种方法详解
2013/11/14 PHP
PHP连接MySQL的2种方法小结以及防止乱码
2014/03/11 PHP
PHP 序列化和反序列化函数实例详解
2020/07/18 PHP
PHP实现深度优先搜索算法(DFS,Depth First Search)详解
2017/09/16 PHP
PHP pthreads v3下worker和pool的使用方法示例
2020/02/21 PHP
js动态为代码着色显示行号
2013/05/29 Javascript
jQuery中appendTo()方法用法实例
2015/01/08 Javascript
jsMind通过鼠标拖拽的方式调整节点位置
2015/04/13 Javascript
高效的jquery数字滚动特效
2015/12/17 Javascript
限制只能输入数字的实现代码
2016/05/16 Javascript
bootstrap paginator分页插件的两种使用方式实例详解
2017/11/14 Javascript
layui table 表格上添加日期控件的两种方法
2019/09/28 Javascript
vue移动端弹起蒙层滑动禁止底部滑动操作
2020/07/22 Javascript
pycharm 使用心得(一)安装和首次使用
2014/06/05 Python
Python中执行存储过程及获取存储过程返回值的方法
2017/10/07 Python
Python实现基本数据结构中栈的操作示例
2017/12/04 Python
利用Tkinter(python3.6)实现一个简单计算器
2017/12/21 Python
解决seaborn在pycharm中绘图不出图的问题
2018/05/24 Python
详解python的sorted函数对字典按key排序和按value排序
2018/08/10 Python
Python实现多线程的两种方式分析
2018/08/29 Python
解决Python 命令行执行脚本时,提示导入的包找不到的问题
2019/01/19 Python
Python实现最大子序和的方法示例
2019/07/05 Python
python项目对接钉钉SDK的实现
2019/07/15 Python
pytorch 图像预处理之减去均值,除以方差的实例
2020/01/02 Python
Pandas把dataframe或series转换成list的方法
2020/06/14 Python
用python-webdriver实现自动填表的示例代码
2021/01/13 Python
中国汽车租赁行业头部企业:一嗨租车
2019/05/16 全球购物
希腊香水和化妆品购物网站:Parfimo.gr
2019/10/03 全球购物
给导游的表扬信
2014/01/10 职场文书
外贸专业求职信
2014/03/09 职场文书
教师工作决心书
2015/02/04 职场文书
医药公司采购员岗位职责
2015/04/03 职场文书
初中生物教学随笔
2015/08/15 职场文书
Redis sentinel哨兵集群的实现步骤
2022/07/15 Redis