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源码分析之Event事件分析
Jun 07 Javascript
模仿百度三维地图的js数据分享
May 12 Javascript
flash调用js中的方法,让js传递变量给flash的办法及思路
Aug 07 Javascript
javascript高级编程之函数表达式 递归和闭包函数
Nov 29 Javascript
学习使用bootstrap基本控件(table、form、button)
Apr 12 Javascript
客户端(vue框架)与服务器(koa框架)通信及服务器跨域配置详解
Aug 26 Javascript
基于substring()和substr()的使用以及区别(实例讲解)
Dec 28 Javascript
nginx部署访问vue-cli搭建的项目的方法
Feb 12 Javascript
Bootstrap的aria-label和aria-labelledby属性实例详解
Nov 02 Javascript
JavaScript变量基本使用方法实例分析
Nov 15 Javascript
如何使用RoughViz可视化Vue.js中的草绘图表
Jan 30 Vue.js
利用promise及参数解构封装ajax请求的方法
Mar 24 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项目打包方法
2008/02/18 PHP
php session应用实例 登录验证
2009/03/16 PHP
使用PHP实现二分查找算法代码分享
2011/06/24 PHP
php中使用$_REQUEST需要注意的一个问题
2013/05/02 PHP
PHP的Yii框架中行为的定义与绑定方法讲解
2016/03/18 PHP
php 解决substr()截取中文字符乱码问题
2016/07/18 PHP
php post换行的方法
2020/02/03 PHP
查询绑定数据岛的表格中的文本并修改显示方式的js代码
2009/12/15 Javascript
30个让人兴奋的视差滚动(Parallax Scrolling)效果网站
2012/03/04 Javascript
当鼠标移动时出现特效的JQuery代码
2013/11/08 Javascript
js中键盘事件实例简析
2015/01/10 Javascript
6种javascript显示当前系统时间代码
2015/12/01 Javascript
node.js通过axios实现网络请求的方法
2018/03/05 Javascript
详解mpvue开发小程序小总结
2018/07/25 Javascript
python实现折半查找和归并排序算法
2017/04/14 Python
深入理解Python中range和xrange的区别
2017/11/26 Python
python将文本分每两行一组并保存到文件
2018/03/19 Python
创建pycharm的自定义python模板方法
2018/05/23 Python
使用numpy和PIL进行简单的图像处理方法
2018/07/02 Python
python使用threading.Condition交替打印两个字符
2019/05/07 Python
pyqt 实现在Widgets中显示图片和文字的方法
2019/06/13 Python
Django项目基础配置和基本使用过程解析
2019/11/25 Python
属性与 @property 方法让你的python更高效
2020/09/21 Python
Python爬虫之Selenium鼠标事件的实现
2020/12/04 Python
45个非常奇妙的CSS3 特性应用示例
2012/01/01 HTML / CSS
HTML5 Canvas 起步(2) - 路径
2009/05/12 HTML / CSS
英国网上自行车商店:Tredz Bikes
2019/10/29 全球购物
基于Python 函数和方法的区别说明
2021/03/24 Python
国贸类专业毕业生的求职信分享
2013/12/08 职场文书
简历里的自我评价
2014/01/31 职场文书
手机银行营销方案
2014/03/14 职场文书
幼儿园中班区域活动总结
2014/07/09 职场文书
骨干教师申报材料
2014/12/17 职场文书
篮球比赛通讯稿
2015/07/18 职场文书
2016五四青年节活动总结范文
2016/04/06 职场文书
年中了,该如何写好个人述职报告?
2019/07/02 职场文书