vue命令式组件和插件编写
一直在写各种业务,好多基本用法都忘记了,回顾一下:
一、vue各种UI库里的命令式组件比如element-ui里Notification组件,可以这样调用
this.$notify({
title: '偏移',
message: '这是一条带有偏移的提示消息',
offset:
});
命令式调用的组件写法分三步:
- 编写组件代码,也就是.vue文件
- Vue.extend()继承扩展组件,编写组件调用逻辑
- 挂载到Vue原型上,使得每个组件实例可以调用
这里简单写个message组件演示一下
1.编写message.vue文件:
<template>
<div class="message" v-if="show">
{{label}}
</div>
</template>
<script>
export default {
data () {
return {
label:'空消息',
show:true
}
}
}
</script>
<style lang="scss">
.message{
position:fixed;
top:20px;
right: 10px;
color: #fff;
background-color: #;
padding: 15px 20px;
width: 180px;
}
</style>
2.实现调用逻辑,messagefun.js文件
import Vue from 'vue'
import Message from './message.vue' const Msg = Vue.extend(Message);
export default (options={}) => {
const instance = new Msg({
el:document.createElement('div'),
data(){
return{
label:options.label
}
}
})
document.body.appendChild(instance.$el);
window.setTimeout(()=>{
instance.$data.show=false
},options.time?options.time:)
}
3.挂载到原型,index.js里
import Vue from 'vue'
import P3 from 'pages/index3.vue'
import Coms from 'pages/page3com/com.js'
import msg from 'pages/page3com/messagefun.js'
Vue.use(Coms) Vue.prototype.$msg = msg; new Vue({
el: '#p3',
render: h => h(P3)
})
4.调用
this.$msg(
{
label:'我是一个消息',
time:
});
效果:页面右上角一个消息通知,4秒后自动消失

二、插件定义编写步骤
- 编写组件代码,即.vue文件
- 统一将组件在插件的install方法里注册为全局组件
- Vue.use(custom)之后即可使用
1.定义两个简单的组件,com1.vue和com2.vue
//com2.vue
<template>
<div class="demo">
<button :style="{color:color}">我是插件二</button>
</div>
</template>
<script>
export default {
name:'com2',
props:{
color:{
type:String,
required:false,
default:'#333'
}
}
}
</script> //com1.vue
<template>
<div class="demo">
<button :style="{color:color}">我是插件一</button>
</div>
</template>
<script>
export default {
name:'com1',
props:{
color:{
type:String,
required:false,
default:'#333'
}
}
}
</script>
2.注册全局组件,com.js
import Vue from 'vue'
import Com1 from './com1.vue'
import Com2 from './com2.vue' const coms = [
Com1,
Com2
]
const install = function(Vue){
coms.forEach(component => {
Vue.component(component.name,component)
})
}
/* 支持使用标签的方式引入 */
if (typeof window !== 'undefined' && window.Vue) {
install(window.Vue);
} export default {
install,
Com1,
Com2
}
3.在index.js里引入并Vue.use()使用组件(use方法会调用对象的install方法)
import Vue from 'vue'
import P3 from 'pages/index3.vue'
import Coms from 'pages/page3com/com.js'
import msg from 'pages/page3com/messagefun.js'
Vue.use(Coms) Vue.prototype.$msg = msg; new Vue({
el: '#p3',
render: h => h(P3)
})
4.使用这两个组件
<template>
<div class="demo">
<com1></com1>
<com2 color="red"></com2>
</div>
</template>
效果:

以上组件都写的比较简单,不过复杂的组件只是组件内部逻辑代码复杂,编写和使用流程再上边已经阐述完毕。
vue命令式组件和插件编写的更多相关文章
- vue插件编写与实战
关于 微信公众号:前端呼啦圈(Love-FED) 我的博客:劳卜的博客 知乎专栏:前端呼啦圈 前言 热爱vue开发的同学肯定知道awesome-vue 这个github地址,里面包含了数以千计的vue ...
- Vue插件编写、用法详解(附demo)
Vue插件编写.用法详解(附demo) 1.概述 简单来说,插件就是指对Vue的功能的增强或补充. 比如说,让你在每个单页面的组件里,都可以调用某个方法,或者共享使用某个变量,或者在某个方法之前执行一 ...
- vue中自定义组件(插件)
vue中自定义组件(插件) 原创 2017年01月04日 22:46:43 标签: 插件 在vue项目中,可以自定义组件像vue-resource一样使用Vue.use()方法来使用,具体实现方法: ...
- vue.js国际化vue-i18n插件的使用问题,在模版文本、组件方法、jsf方法里的使用
vue.js国际化vue-i18n插件的使用问题,在模版文本.组件方法.jsf方法里的使用 1.在文本里使用{{$t("xxx")}} <span>{{$t(" ...
- chart.js angular组件封装(ng6)、实战配置、插件编写
前言 项目需要使用chart.js插件,由于项目是使用angular开发,那么我第一步就是先把chart.js改造成angular组件来使用. 本项目代码都可以在github上下载:项目git地址 a ...
- vue axios拦截器 + 自编写插件 实现全局 loading 效果;
项目需求:用自定义的 .gif 图标实现全局 loading 效果:为避免在每个页面手动添加,且简单高效的实现,经查阅资料,最终采用了 vue axios拦截器 + 自编写 loading 插件:下面 ...
- 自己封装 vue 组件 和 插件
vue 组件 一.组件的创建,两种方法.(本质上是1.2两种,vue文件,只是创建了一个 组件选项对象,仅是一个js对象)1.定义组件:Vue.component('button-counter', ...
- vue.js组件化开发实践
前言 公司目前制作一个H5活动,特别是有一定统一结构的活动,都要码一个重复的轮子.后来接到一个基于模板的活动设计系统的需求,便有了下面的内容.借油开车. 组件化 需求一到,接就是怎么实现,技术选型自然 ...
- VUE.JS组件化
VUE.JS组件化 前言 公司目前制作一个H5活动,特别是有一定统一结构的活动,都要码一个重复的轮子.后来接到一个基于模板的活动设计系统的需求,便有了下面的内容.借油开车. 组件化 需求一到,接就是怎 ...
随机推荐
- Java中间件之RMI及实例介绍 · zijian's blog
RMI介绍 远程方法调用(Remote Method Invocation)是Sun公司规定的允许在不同的JAVA虚拟机之间进行对象间通信的一种规范.在RMI中,JVM可以位于一个或多个计算机上, ...
- USB描述符(转)
//============================================================================// 文件名: USBDESC.C// 用 ...
- VI.应用-Trajectory Data Mining
$textbf{Trajectory Data Mining: An Overview}$ 很好的一篇概述,清晰明了地阐述了其框架,涉及内容又十分宽泛.值得细读. 未完成,需要补充. $textbf{ ...
- 无线城域网 WMAN
无线城域网 WMAN (Wireless Metropolitan Area Network) 1.1.概述 2002 年 4 月通过了 802.16 无线城域网的标准.欧洲的 ETSI 也制订类似的 ...
- win10环境下VS2019配置NTL库
win10环境下VS2019配置NTL库 1.下载 WINNTL库文件 https://www.shoup.net/ntl/download.html 2.创建静态库 文件->新建-&g ...
- Python3——2019年全国大学生计算二级考试
Python语言程序设计二级重点(2019年版) 第一章 程序设计基本方法 IPO程序编写方法 :输入(input),输出(output),处理(process): Python程序的特点: (1)语 ...
- H5页面通用头部设置
见到很多人写H5页面都不设置头部,不忍直视,于是整理一篇文章,不定期更新,为了让自己显得专业一点,也为了方便自己复制粘贴 一般来说必须设置项 <!-- 页面编码 --> <meta ...
- 峰哥说技术:06-手撸Spring Boot自定义启动器,解密Spring Boot自动化配置原理
Spring Boot深度课程系列 峰哥说技术—2020庚子年重磅推出.战胜病毒.我们在行动 06 峰哥说技术:手撸Spring Boot自定义启动器,解密Spring Boot自动化配置原理 Sp ...
- 【Java必修课】判断String是否包含子串的四种方法及性能对比
1 简介 判断一个字符串是否包含某个特定子串是常见的场景,比如判断一篇文章是否包含敏感词汇.判断日志是否有ERROR信息等.本文将介绍四种方法并进行性能测试. 2 四种方法 2.1 JDK原生方法St ...
- linux 安装Mosquitto
这篇博客讲的很好:https://www.cnblogs.com/chen1-kerr/p/7258487.html 此处简单摘抄部分内容 1.下载mosquitto安装包 源码地址:http://m ...