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 getElementsByClassName 和js取地址栏参数
Jan 02 Javascript
jquery绑定事件不生效的解决方法
Feb 11 Javascript
JavaScript验证18位身份证号码最后一位正确性的实现代码
Aug 07 Javascript
基于javascript如何传递特殊字符
Nov 30 Javascript
完全深入学习Bootstrap表单
Nov 28 Javascript
基于ajax与msmq技术的消息推送功能实现代码
Dec 26 Javascript
Vue.js实战之组件的进阶
Apr 04 Javascript
AngularJS实现controller控制器间共享数据的方法示例
Oct 30 Javascript
Bootstrap Fileinput 4.4.7文件上传实例详解
Jul 25 Javascript
JavaScript实现捕获鼠标坐标
Apr 12 Javascript
微信小程序 scroll-view的使用案例代码详解
Jun 11 Javascript
如何在vue中使用kindeditor富文本编辑器
Dec 19 Vue.js
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学习之 认清变量的作用范围
2010/01/26 PHP
深入php self与$this的详解
2013/06/08 PHP
使用HMAC-SHA1签名方法详解
2013/06/26 PHP
php强制用户转向www域名的方法
2015/06/19 PHP
PHP使用 Pear 进行安装和卸载包的方法详解
2019/07/08 PHP
Laravel 连接(Join)示例
2019/10/16 PHP
在textarea中显示html页面的javascript代码
2007/04/20 Javascript
7个Javascript地图脚本整理
2009/10/20 Javascript
关于query Javascript CSS Selector engine
2013/04/12 Javascript
jquery配合css简单实现返回顶部效果
2013/09/30 Javascript
js日期对象兼容性的处理方法
2014/01/28 Javascript
javascript读取Xml文件做一个二级联动菜单示例
2014/03/17 Javascript
javascript调试之DOM断点调试法使用技巧分享
2014/04/15 Javascript
js如何判断输入字符串长度
2015/12/16 Javascript
原生JavaScript制作微博发布面板效果
2016/03/11 Javascript
微信小程序使用Vant Weapp组件库的方法步骤
2019/08/01 Javascript
JS中的算法与数据结构之集合(Set)实例详解
2019/08/20 Javascript
微信小程序wx.request的简单封装
2019/11/13 Javascript
微信小程序之左右布局的实现代码
2019/12/13 Javascript
[00:55]深扒TI7聊天轮盘语音出处3
2017/05/11 DOTA
python在linux中输出带颜色的文字的方法
2014/06/19 Python
在Python的Django框架中调用方法和处理无效变量
2015/07/15 Python
Python向日志输出中添加上下文信息
2017/05/24 Python
python 搜索大文件的实例代码
2019/07/08 Python
将keras的h5模型转换为tensorflow的pb模型操作
2020/05/25 Python
快速解决pymongo操作mongodb的时区问题
2020/12/05 Python
世界上最好的威士忌和烈性酒购买网站:The Whisky Exchange
2016/11/20 全球购物
friso美素佳儿官方海外旗舰店:荷兰原产原罐
2017/07/03 全球购物
英国在线药房:Express Chemist
2019/03/28 全球购物
美国购买韩国护肤和美容产品网站:Althea Korea
2020/11/16 全球购物
垃圾回收的优点和原理。并考虑2种回收机制
2016/10/16 面试题
毕业生自荐书
2014/02/02 职场文书
庆元旦活动总结
2014/07/09 职场文书
2014年幼儿园学期工作总结
2014/12/05 职场文书
运动会致辞稿
2015/07/29 职场文书
python 利用PyAutoGUI快速构建自动化操作脚本
2021/05/31 Python