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 相关文章推荐
JavaScript高级程序设计 读书笔记之八 Function类及闭包
Feb 27 Javascript
JS操作Cookies的小例子
Oct 15 Javascript
showModalDialog模态对话框的使用详解以及浏览器兼容
Jan 11 Javascript
jquery.map()方法的使用详解
Jul 09 Javascript
jquery编写日期选择器
Mar 16 Javascript
CodeMirror js代码加亮使用总结
Mar 25 Javascript
Node.js搭建小程序后台服务
Jan 03 Javascript
H5+C3+JS实现五子棋游戏(AI篇)
May 28 Javascript
基于Vue实现图片在指定区域内移动的思路详解
Nov 11 Javascript
JavaScript实现移动端带transition动画的轮播效果
Mar 24 Javascript
关于element-ui表单中限制输入纯数字的解决方式
Sep 08 Javascript
Typescript类型系统FLOW静态检查基本规范
May 25 Javascript
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
使用php+xslt在windows平台上
2006/10/09 PHP
php 无极分类(递归)实现代码
2010/01/05 PHP
javascript 处理HTML元素必须避免使用的一种方法
2009/07/30 Javascript
js内置对象 学习笔记
2011/08/01 Javascript
javascript对中文按照拼音排序代码
2014/08/20 Javascript
jquery实现动态改变div宽度和高度
2015/05/08 Javascript
详解JavaScript设计模式开发中的桥接模式使用
2016/05/18 Javascript
用js制作淘宝放大镜效果
2020/10/28 Javascript
vue.js分页中单击页码更换页面内容的方法(配合spring springmvc)
2018/02/10 Javascript
JavaScript闭包原理与用法实例分析
2018/08/10 Javascript
layui-select动态选中值的例子
2019/09/23 Javascript
Electron整合React使用搭建开发环境的步骤详解
2020/06/07 Javascript
vue v-for出来的列表,点击某个li使得当前被点击的li字体变红操作
2020/07/17 Javascript
[03:21]【TI9纪实】Old Boys
2019/08/23 DOTA
[01:16:28]DOTA2-DPC中国联赛 正赛 iG vs Magma BO3 第二场 2月23日
2021/03/11 DOTA
python 字符串split的用法分享
2013/03/23 Python
用python写asp详细讲解
2013/12/16 Python
深入Python函数编程的一些特性
2015/04/13 Python
Python程序中用csv模块来操作csv文件的基本使用教程
2016/03/03 Python
Python中字符串的修改及传参详解
2016/11/30 Python
python操作列表的函数使用代码详解
2017/12/28 Python
python批量导入数据进Elasticsearch的实例
2018/05/30 Python
PyQt5多线程刷新界面防假死示例
2019/12/13 Python
Python GUI编程学习笔记之tkinter事件绑定操作详解
2020/03/30 Python
python 实现围棋游戏(纯tkinter gui)
2020/11/13 Python
matplotlib绘制鼠标的十字光标的实现(内置方式)
2021/01/06 Python
大学自主招生自荐信范文
2014/02/26 职场文书
媒体宣传策划方案
2014/05/25 职场文书
我的中国心演讲稿
2014/09/04 职场文书
创先争优演讲稿
2014/09/15 职场文书
工作自我推荐信范文
2015/03/25 职场文书
开学第一周总结
2015/07/16 职场文书
三严三实·严以律己心得体会
2016/01/13 职场文书
2017寒假社会实践心得体会范文
2016/01/14 职场文书
2016年小学圣诞节活动总结
2016/03/31 职场文书
Python中glob库实现文件名的匹配
2021/06/18 Python