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 的addEventListener()及attachEvent()区别分析
May 21 Javascript
JavaScript 对象链式操作测试代码
Apr 25 Javascript
js计算精度问题小结
Apr 22 Javascript
Javascript实现Web颜色值转换
Feb 05 Javascript
jquery.form.js实现将form提交转为ajax方式提交的方法
Apr 07 Javascript
jQuery实现带有动画效果的回到顶部和底部代码
Nov 04 Javascript
Javascript基于AJAX回调函数传递参数实例分析
Dec 15 Javascript
基于vue2框架的机器人自动回复mini-project实例代码
Jun 13 Javascript
Angularjs中数据绑定的实例详解
Aug 25 Javascript
express默认日志组件morgan的方法
Apr 05 Javascript
详解小程序缓存插件(mrc)
Aug 17 Javascript
node(koa2) web应用模块介绍详解
Mar 29 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过滤html字符串,防止SQL注入的方法
2013/07/02 PHP
php对图像的各种处理函数代码小结
2013/07/08 PHP
php中array_fill函数的实例用法
2021/03/02 PHP
jquery异步跨域访问代码
2013/06/28 Javascript
Javascript基础教程之数据类型 (布尔型 Boolean)
2015/01/18 Javascript
javascript中sort()的用法实例分析
2015/01/30 Javascript
JavaScript实现动态删除列表框值的方法
2015/08/12 Javascript
jQuery实现div拖拽效果实例分析
2016/02/20 Javascript
jQuery实现HTML表格单元格的合并功能
2016/04/06 Javascript
BootStrap使用file-input插件上传图片的方法
2016/09/05 Javascript
Vuejs第一篇之入门教程详解(单向绑定、双向绑定、列表渲染、响应函数)
2016/09/09 Javascript
Bootstrap源码解读按钮(5)
2016/12/23 Javascript
Angular 4依赖注入学习教程之InjectToken的使用(八)
2017/06/04 Javascript
jquery ajax 请求小技巧实例分析
2019/11/11 jQuery
vue项目打包后提交到git上为什么没有dist这个文件的解决方法
2020/09/16 Javascript
vue项目实现减少app.js和vender.js的体积操作
2020/11/12 Javascript
Python连接mssql数据库编码问题解决方法
2015/01/01 Python
Python中绑定与未绑定的类方法用法分析
2016/04/29 Python
Python数据类型详解(二)列表
2016/05/08 Python
python 统计数组中元素出现次数并进行排序的实例
2018/07/02 Python
python实现银联支付和支付宝支付接入
2019/05/07 Python
Python编程学习之如何判断3个数的大小
2019/08/07 Python
用Python做一个久坐提醒小助手的示例代码
2020/02/10 Python
python 的numpy库中的mean()函数用法介绍
2020/03/03 Python
python使用信号量动态更新配置文件的操作
2020/04/01 Python
用python实现一个简单计算器(完整DEMO)
2020/10/14 Python
python调用win32接口进行截图的示例
2020/11/11 Python
Swanson中国官网:美国斯旺森健康产品公司
2021/03/01 全球购物
毕业自我鉴定范文
2013/11/06 职场文书
人事专员岗位职责范本
2014/03/04 职场文书
政协会议宣传标语
2014/10/09 职场文书
2015年幼儿园班务工作总结
2015/05/12 职场文书
贴吧吧主申请感言
2015/08/03 职场文书
《雪地里的小画家》教学反思
2016/02/16 职场文书
详解Java分布式事务的 6 种解决方案
2021/06/26 Java/Android
springboot 启动如何排除某些bean的注入
2021/08/02 Java/Android