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 对Select的操作备忘记录
Jul 04 Javascript
jquery鼠标滑过提示title具体实现代码
Aug 06 Javascript
为什么Node.js会这么火呢?Node.js流行的原因
Dec 01 Javascript
js获取当前时间显示在页面上并每秒刷新
Dec 24 Javascript
JavaScript中的变量作用域介绍
Dec 31 Javascript
DOM中事件处理概览与原理的全面解析
Aug 16 Javascript
jquery——九宫格大转盘抽奖实例
Jan 16 Javascript
js简易版购物车功能
Jun 17 Javascript
jquery DataTable实现前后台动态分页
Jun 17 jQuery
微信小程序之前台循环数据绑定
Aug 18 Javascript
详解JavaScript作用域 闭包
Jul 29 Javascript
Java 生成随机字符的示例代码
Jan 13 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
为百度UE编辑器上传图片添加水印功能
2015/04/16 PHP
php 如何获取文件的后缀名
2016/06/05 PHP
yii2.0整合阿里云oss的示例代码
2017/09/19 PHP
PHP大文件分片上传的实现方法
2018/10/28 PHP
Yii2框架配置文件(Application属性)与调试技巧实例分析
2019/05/27 PHP
Jquery实现仿新浪微博获取文本框能输入的字数代码
2013/02/22 Javascript
Javascript动画的实现原理浅析
2015/03/02 Javascript
jquery实现用户信息修改验证输入方法汇总
2015/07/18 Javascript
Node.js中Request模块处理HTTP协议请求的基本使用教程
2016/03/31 Javascript
Bootstrap3.0建站教程(一)之bootstrap表单元素排版
2016/06/01 Javascript
nodejs的HTML分析利器node-jquery用法浅析
2016/11/08 NodeJs
js时间戳格式化成日期格式的多种方法介绍
2017/02/16 Javascript
javascript 作用于作用域链的详解
2017/09/27 Javascript
Vue的H5页面唤起支付宝支付功能
2019/04/18 Javascript
vue如何截取字符串
2019/05/06 Javascript
element ui分页多选,翻页记忆的实例
2019/09/03 Javascript
JS前端广告拦截实现原理解析
2020/02/17 Javascript
[44:22]完美世界DOTA2联赛循环赛 FTD vs PXG BO2第一场 11.01
2020/11/02 DOTA
安装Python的web.py框架并从hello world开始编程
2015/04/25 Python
Python自定义线程类简单示例
2018/03/23 Python
删除DataFrame中值全为NaN或者包含有NaN的列或行方法
2018/11/06 Python
Python数据可视化教程之Matplotlib实现各种图表实例
2019/01/13 Python
pycharm激活码快速激活及使用步骤
2020/03/12 Python
基于Python实现视频的人脸融合功能
2020/06/12 Python
Keras实现DenseNet结构操作
2020/07/06 Python
python进度条显示之tqmd模块
2020/08/22 Python
Wedgwood美国官网:英国骨瓷,精美礼品及家居装饰
2018/02/17 全球购物
团员学习总结的自我评价范文
2013/10/14 职场文书
办公自动化毕业生求职信
2014/03/09 职场文书
药学职务聘任书
2014/03/29 职场文书
工商局局长个人对照检查材料思想汇报
2014/09/23 职场文书
2014-2015学年工作总结
2014/11/27 职场文书
升学宴家长致辞
2015/07/27 职场文书
《地震中的父与子》教学反思
2016/02/16 职场文书
2019毕业论文致谢词
2019/06/24 职场文书
《狼牙山五壮士》读后感:宁死不屈,视死如归
2019/08/16 职场文书