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活动,特别是有一定统一结构的活动,都要码一个重复的轮子.后来接到一个基于模板的活动设计系统的需求,便有了下面的内容.借油开车. 组件化 需求一到,接就是怎 ...
随机推荐
- Android APP性能及专项测试
移动测试. Android测试 .APP测试 Android篇 1. 性能测试 Android性能测试分为两类:1.一类为rom版本(系统)的性能测试2.一类为应用app的性能测试 Android的a ...
- Mybatis: 插件及分页
Mybatis采用责任链模式,通过动态代理组织多个拦截器(插件),通过这些拦截器可以改变Mybatis的默认行为(诸如SQL重写之类的). Mybatis支持对Executor.StatementHa ...
- C++走向远洋——58(项目二3、动物这样叫、改进版)
*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...
- Blind Estimation and Detection of Space-Time Trellis Coded Transmissions over the Rayleigh Fading MIMO Channel
目录 文章来源 摘要 基本概念 粒子滤波 时间序列模型 系统模型 通信系统 经典状态空间表示 论文所提出的状态空间表示 借鉴之处 文章来源 IEEE TRANSACTIONS ON COMMUNICA ...
- 浅谈ConcurrentDictionary与Dictionary
在.NET4.0之前,如果我们需要在多线程环境下使用Dictionary类,除了自己实现线程同步来保证线程安全外,我们没有其他选择.很多开发人员肯定都实现过类似的线程安全方案,可能是通过创建全新的线程 ...
- 随手撸一个简单的带检查的printf
#include <stdio.h> #include <iostream> #include <vector> #include <string> # ...
- 一文了解各大图数据库查询语言(Gremlin vs Cypher vs nGQL)| 操作入门篇
文章的开头我们先来看下什么是图数据库,根据维基百科的定义:图数据库是使用图结构进行语义查询的数据库,它使用节点.边和属性来表示和存储数据. 虽然和关系型数据库存储的结构不同(关系型数据库为表结构,图数 ...
- JUC-八锁现象和不安全锁
1,被 synchronized 修饰的方法,锁的对象是方法的调用者(实例对象) 2,被 static 修饰的方法,锁的对象就是 Class模板对象,这个则全局唯一 问题7: 一个普通同步方法,一个静 ...
- Flutter01-学习准备
1. 简介: Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面. Flutter可以与现有的代码一起工作.在全世界,Flutter正在被越来越多的开发者和 ...
- 使用AQS自定义重入锁
一.创建MyLock import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.AbstractQueuedSyn ...