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 相关文章推荐
jQuery1.3.2 升级到jQuery1.4.4需要修改的地方
Jan 06 Javascript
jQuery EasyUI API 中文文档 - DataGrid数据表格
Nov 17 Javascript
js+xml生成级联下拉框代码
Jul 24 Javascript
jQuery动态改变图片显示大小(修改版)的实现思路及代码
Dec 24 Javascript
jquerymobile局部渲染的各种刷新方法小结
Mar 05 Javascript
JavaScript学习笔记之数组随机排序
Mar 23 Javascript
AngularJS入门教程之XHR和依赖注入详解
Aug 18 Javascript
基于Vue的文字跑马灯组件(npm 组件包)
May 24 Javascript
解决JS内存泄露之js对象和dom对象互相引用问题
Jun 25 Javascript
vue 表单验证按钮事件交由父组件触发的方法
Dec 17 Javascript
JS实现求字符串中出现最多次数的字符和次数示例
Jul 05 Javascript
Vue实例的对象参数options的几个常用选项详解
Nov 08 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数据库密码的找回的步骤
2011/01/12 PHP
九个你必须知道而且又很好用的php函数和特点
2013/08/08 PHP
PHP实现PDO的mysql数据库操作类
2014/12/12 PHP
PHP获取远程http或ftp文件的md5值的方法
2019/04/15 PHP
网页设计常用的一些技巧
2006/12/22 Javascript
使用jQuery.wechat构建微信WEB应用
2014/10/09 Javascript
简单谈谈javascript Date类型
2015/09/06 Javascript
vue组件父子间通信详解(三)
2017/11/07 Javascript
获取本机IP地址的实例(JavaScript / Node.js)
2017/11/24 Javascript
Angular2管道Pipe及自定义管道格式数据用法实例分析
2017/11/29 Javascript
Bootstrap导航菜单点击后无法自动添加active的处理方法
2018/08/10 Javascript
vant(ZanUi)结合async-validator实现表单验证的方法
2018/12/06 Javascript
Vue模板语法中数据绑定的实例代码
2019/05/17 Javascript
手把手教你 CKEDITOR 4 实现Dialog 内嵌 IFrame操作详解
2019/06/18 Javascript
vue webpack build资源相对路径的问题及解决方法
2020/06/04 Javascript
js实现表单项的全选、反选及删除操作示例
2020/06/05 Javascript
Python编程实现双击更新所有已安装python模块的方法
2017/06/05 Python
Python内置函数——__import__ 的使用方法
2017/11/24 Python
python在文本开头插入一行的实例
2018/05/02 Python
Python实现带参数的用户验证功能装饰器示例
2018/12/14 Python
python实现静态web服务器
2019/09/03 Python
python实现宿舍管理系统
2019/11/22 Python
Python自动采集微信联系人的实现示例
2020/02/28 Python
python argparse模块通过后台传递参数实例
2020/04/20 Python
video实现有声音自动播放的实现方法
2020/05/20 HTML / CSS
FILA德国官方网站:来自意大利的体育和街头服饰品牌
2019/07/19 全球购物
.net工程师笔试题
2012/06/09 面试题
工业学校毕业生自荐信范文
2014/01/03 职场文书
高三政治教学反思
2014/02/06 职场文书
2014年庆元旦活动方案
2014/02/15 职场文书
沙滩主题婚礼活动策划方案
2014/09/15 职场文书
银行会计主管岗位职责
2014/10/01 职场文书
交通事故被告代理词
2015/05/23 职场文书
管理者们如何制定2019年的工作计划?
2019/07/01 职场文书
python tqdm用法及实例详解
2021/06/16 Python
python识别围棋定位棋盘位置
2021/07/26 Python