Vue学习之组件用法实例详解


Posted in Javascript onJanuary 06, 2020

本文实例讲述了Vue学习之组件用法。分享给大家供大家参考,具体如下:

Vue中的模块化、可重用代码块将页面细分为一个个功能组件,而且组件之间可以嵌套。组件分为全局组件与局部组件,局部组件在实例中进行注册,并且只可以应用于该实例中。

1、 组件的使用流程:

//1、创建组件构造器
    let overallDiv=Vue.extend({
      template:`
        <div>
          <p>这是一个全局组件div</p>
        </div>
      `
    });
  //2、注册全局组件
    Vue.component('overall-div',overallDiv);
  //3、实例化,组件只有在实例化的div内才能使用,不可以直接在页面中使用
    let vue=new Vue({
      el:'#app',
      data:{},
    //在实例内注册局部组件,其创建与注册可以合为一步来写
    components:{
      'local-div':{
        template:
          ` <div>
              <p>这是一个局部组件div</p>
           </div>
          `
      }
    },
    methods:{
    }
    });

在HTML页面实例化的div中使用组件:

<div id="app">
    <local-div></local-div>
    <overall-div></overall-div>
  </div>

Vue学习之组件用法实例详解

注意:一些HTML标签对放入其中的标签有限制,这时需要通过is属性将组件转化为你要放入的组件,例如<ul>标签下只能放<li>,这时,你可以使用<li is="my-component">,这样就相当于放入了<my-component>标签。

2、template模板

组件的模板除了在js中创建外,还可以使用页面中的template创建模板,注意页面中的模板只能有一个根元素,如有多个元素需要包含在一个div内,例如页面body中的模板:

<template id="myTmp">
    <div>
      <p>这是页面中的模板</p>
    </div>
  </template>

在js中通过id号注册模板。

Vue.component('my-tmp',{
    template:'#myTmp'
  });

3、组件的data

在组件中使用data必须以函数的形式返回,如果以属性值的形式存在,所有的组件会共享一个属性值,更改其中一个,所有的组件都会收到影响。例如一个统计被点击次数的组件:

<template id="myBtn">
    <div>
      <button @click="count++">按钮被点击{{count}}次</button>
    </div>
  </template>
Vue.component('my-btn',{
    template:'#myBtn',
    data () {    //以函数返回的方式定义组件使用的data
      return {
        count:0
      };
    }
  });   
  <div id="app">
    <my-btn></my-btn>
    <my-btn></my-btn>
  </div>

在页面中分别点击两个按钮,两个按钮组件的count分别计数,不会互相干扰:

Vue学习之组件用法实例详解

4、父子组件

先创建子组件,然后再父组件内进行注册,就可以在父组件的模板内使用子组件,然后再注册父组件,这样就可以在外部调用包含子组件的父组件了,外部直接使用父组件接口,而不需要知道内部子组件的实现

注意在外部不能直接使用子组件,因为它只在父组件内进行了注册,外部看不到子组件

let child1=Vue.extend({
    template:`<div>这是子组件1</div>`
  });
  let child2=Vue.extend({
    template:`<div>这是子组件2</div>`
  });
  Vue.component('parent',{
    components:{
      'c1':child1,
      'c2':child2
    },
    //在父组件内调用子组件
    template:`<div>父组件<c1></c1><c2></c2></div>`
  });
  <div id="app">
    <parent></parent>
  </div>

结果如图:

Vue学习之组件用法实例详解

5、插槽slot

像生活中的容器一样,slot允许向其中插入标签、组件等内容,而在外部提供一个框子包装起来。slot分为匿名插槽与实名插槽,匿名插槽可以向其中插入任何类型的内容。

实名slot可以将内容插入指定的插槽内,就像一台电脑的主板,cpu、内存条分别有自己对应的插槽,实名插槽在模板中通过name属性规定插槽的名字,在使用时,通过标签的slot属性指定对应的name,可以将标签插入指定的插槽。

匿名插槽

<!--匿名插槽-->
  <template id="anonymousDiv">
    <div style="width: 20%;">
      <h3>这是插槽头部</h3>
      <slot>插槽默认显示内容</slot>
      <hr/>
      <p>插槽尾部</p>
    </div>
  </template>
  let vue2=new Vue({
    el:'#app2',
    data:{
    },
    components:{
     //绑定匿名插槽
     'anonymous-slot':{
       template:'#anonymousDiv'
     },
     //绑定实名插槽
     'realname-slot':{
       template:'#realnameDiv'
     }
    }
  });

向cpu插槽内插入内容:

<div id="app2">
    <anonymous-slot>
      <p>向插槽中插入一段文字</p>
    </anonymous-slot>
  </div>

插槽未放入内容时:插入一段文字:

Vue学习之组件用法实例详解

实名插槽

<template id="realnameDiv">
<div>
  <h3>实名插槽头部</h3>
  <slot name="cpu">这是cpu插槽</slot>
  <slot name="memery">这是内存条插槽</slot>
  <slot name="HardDisk">这是硬盘插槽</slot>
</div>
</template>
<realname-slot>
  <p slot="cpu">Intel Core i5</p>
</realname-slot>

结果:cpu放入指定插槽,而其他插槽未受影响:

Vue学习之组件用法实例详解

希望本文所述对大家vue.js程序设计有所帮助。

Javascript 相关文章推荐
jquery清空textarea等输入框实现代码
Apr 22 Javascript
js 程序执行与顺序实现详解
May 13 Javascript
div拖拽插件——JQ.MoveBox.js(自制JQ插件)
May 17 Javascript
深入解析contentWindow, contentDocument
Jul 04 Javascript
jQuery在html有效在jsp无效的原因及解决方法
Aug 02 Javascript
js获得地址栏?问号后参数的方法
Aug 08 Javascript
搭建pomelo 开发环境
Jun 24 Javascript
jQuery结合HTML5制作的爱心树表白动画
Feb 01 Javascript
jQuery动态星级评分效果实现方法
Aug 06 Javascript
js仿微博实现统计字符和本地存储功能
Dec 22 Javascript
微信小程序图片自适应支持多图实例详解
Jun 21 Javascript
jQuery实现腾讯信用界面(自制刻度尺)样式
Aug 15 jQuery
Vue+abp微信扫码登录的实现代码示例
Jan 06 #Javascript
Vue学习之axios的使用方法实例分析
Jan 06 #Javascript
vue 微信扫码登录(自定义样式)
Jan 06 #Javascript
React学习之JSX与react事件实例分析
Jan 06 #Javascript
vue学习之Vue-Router用法实例分析
Jan 06 #Javascript
借助云开发实现小程序短信验证码的发送
Jan 06 #Javascript
React学习之受控组件与数据共享实例分析
Jan 06 #Javascript
You might like
php单态设计模式(单例模式)实例
2014/11/18 PHP
php去除数组中重复数据
2014/11/18 PHP
PHP自带ZIP压缩、解压缩类ZipArchiv使用指南
2015/03/03 PHP
PHP实现在对象之外访问其私有属性private及保护属性protected的方法
2017/11/20 PHP
Smarty模板语法详解
2019/07/20 PHP
关于laravel 日志写入失败问题汇总
2019/10/17 PHP
将CKfinder整合进CKEditor3.0的新方法
2010/01/10 Javascript
20个非常棒的 jQuery 幻灯片插件和教程分享
2011/08/23 Javascript
jquery操作cookie插件分享
2014/01/14 Javascript
JS中操作JSON总结
2020/12/06 Javascript
Angularjs 基础入门
2014/12/26 Javascript
JavaScript 事件绑定及深入
2015/04/13 Javascript
详细解读JavaScript编程中的Promise使用
2015/07/27 Javascript
jquery插件jquery.nicescroll实现图片无滚动条左右拖拽的方法
2015/08/10 Javascript
jQuery ui实现动感的圆角渐变网站导航菜单效果代码
2015/08/26 Javascript
JavaScript中的原型prototype完全解析
2016/05/10 Javascript
jQuery实现验证表单密码一致性及正则表达式验证邮箱、手机号的方法
2017/12/05 jQuery
vue登录路由验证的实现
2017/12/13 Javascript
jquery实现Ajax请求的几种常见方式总结
2019/05/28 jQuery
NodeJs crypto加密制作token的实现代码
2019/11/15 NodeJs
[01:32]2016国际邀请赛中国区预选赛CDEC战队教练采访
2016/06/26 DOTA
[40:19]2018完美盛典CS.GO表演赛
2018/12/17 DOTA
python re正则表达式模块(Regular Expression)
2014/07/16 Python
Python的Django框架中URLconf相关的一些技巧整理
2015/07/18 Python
用Python删除本地目录下某一时间点之前创建的所有文件的实例
2017/12/14 Python
详解java调用python的几种用法(看这篇就够了)
2020/12/10 Python
使用CSS3实现多列布局与多背景的技巧
2016/02/29 HTML / CSS
CSS 3.0文字悬停跳动特效代码
2020/10/26 HTML / CSS
HTML5中5个简单实用的API(第二篇,含全屏、可见性、拍照、预加载、电池状态)
2014/05/07 HTML / CSS
.TTL是什么?有什么用处,通常那些工具会用到它?(ping? traceroute? ifconfig? netstat?)
2016/05/09 面试题
AJAX应用和传统Web应用有什么不同
2013/08/24 面试题
激情洋溢的毕业生就业求职信
2014/03/15 职场文书
信用卡结清证明怎么写
2014/09/13 职场文书
人与自然的观后感
2015/06/18 职场文书
未来,这5大方向都很适合创业
2019/07/22 职场文书
MySQL 亿级数据导入导出及迁移笔记
2021/06/18 MySQL