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 相关文章推荐
JS控制表格隔行变色
Jun 26 Javascript
jQuery中使用Ajax获取JSON格式数据示例代码
Nov 26 Javascript
jQuery表格插件ParamQuery简单使用方法示例
Dec 05 Javascript
jQuery层次选择器用法示例
Sep 09 Javascript
jQuery的三种bind/One/Live/On事件绑定使用方法
Feb 23 Javascript
借助node实战JSONP跨域实例
Mar 30 Javascript
iscroll实现下拉刷新功能
Jul 18 Javascript
jQuery轻量级表单模型验证插件
Oct 15 jQuery
vue实现带复选框的树形菜单
May 27 Javascript
layui的select联动实现代码
Sep 28 Javascript
微信小程序自定义头部导航栏(组件化)
Nov 15 Javascript
一文帮你理解PReact10.5.13源码
Apr 03 Javascript
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
如何使用脚本模仿登陆过程
2006/11/22 PHP
php 获取当前访问的url文件名的方法小结
2010/02/08 PHP
利用php实现一周之内自动登录存储机制(cookie、session、localStorage)
2016/10/31 PHP
asp.net HttpHandler实现图片防盗链
2009/11/09 Javascript
javascript 实现子父窗体互相传值的简单实例
2014/02/17 Javascript
javascript实现iframe框架延时加载的方法
2014/10/30 Javascript
jQuery插件Skippr实现焦点图幻灯片特效
2015/04/12 Javascript
javascript通过元素id和name直接取得元素的方法
2015/04/28 Javascript
jQuery移动web开发之页面跳转和加载外部页面的实现
2015/12/04 Javascript
浅析jquery如何判断滚动条滚到页面底部并执行事件
2016/04/29 Javascript
基于BootStrap的图片轮播效果展示实例代码
2016/05/23 Javascript
微信小程序 action-sheet底部菜单详解
2016/10/27 Javascript
AngularJS中transclude用法详解
2016/11/03 Javascript
任意Json转成无序列表的方法示例
2016/12/09 Javascript
JQuery和HTML5 Canvas实现弹幕效果
2017/01/04 Javascript
JS如何实现在页面上快速定位(锚点跳转问题)
2017/08/14 Javascript
angular中不同的组件间传值与通信的方法
2017/11/04 Javascript
JavaScript中click和onclick本质区别与用法分析
2018/06/07 Javascript
React Native基础入门之初步使用Flexbox布局
2018/07/02 Javascript
vuejs+element UI点击编辑表格某一行时获取内容填入表单的示例
2018/10/31 Javascript
[04:42]2015国际邀请赛CDEC战队晋级之路
2015/08/13 DOTA
Python编程之变量赋值操作实例分析
2017/07/24 Python
详解supervisor使用教程
2017/11/21 Python
Python实现识别手写数字大纲
2018/01/29 Python
简单的python协同过滤程序实例代码
2018/01/31 Python
Python爬虫:Request Payload和Form Data的简单区别说明
2020/04/30 Python
Python通过len函数返回对象长度
2020/10/22 Python
H5离线存储Manifest原理及使用
2020/04/28 HTML / CSS
moosejaw旗下的户外商品促销网站:Mountain Steals
2017/02/27 全球购物
社区党总支书记先进事迹材料
2014/01/24 职场文书
餐厅楼面部长岗位职责范文
2014/02/16 职场文书
社区娱乐活动方案
2014/08/21 职场文书
小区门卫的岗位职责
2014/09/26 职场文书
酒店前台岗位职责
2015/04/16 职场文书
公司员工管理制度
2015/08/04 职场文书
java版 简单三子棋游戏
2022/05/04 Java/Android