一直在写各种业务,好多基本用法都忘记了,回顾一下:

一、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命令式组件和插件编写的更多相关文章

  1. vue插件编写与实战

    关于 微信公众号:前端呼啦圈(Love-FED) 我的博客:劳卜的博客 知乎专栏:前端呼啦圈 前言 热爱vue开发的同学肯定知道awesome-vue 这个github地址,里面包含了数以千计的vue ...

  2. Vue插件编写、用法详解(附demo)

    Vue插件编写.用法详解(附demo) 1.概述 简单来说,插件就是指对Vue的功能的增强或补充. 比如说,让你在每个单页面的组件里,都可以调用某个方法,或者共享使用某个变量,或者在某个方法之前执行一 ...

  3. vue中自定义组件(插件)

    vue中自定义组件(插件) 原创 2017年01月04日 22:46:43 标签: 插件 在vue项目中,可以自定义组件像vue-resource一样使用Vue.use()方法来使用,具体实现方法: ...

  4. vue.js国际化vue-i18n插件的使用问题,在模版文本、组件方法、jsf方法里的使用

    vue.js国际化vue-i18n插件的使用问题,在模版文本.组件方法.jsf方法里的使用 1.在文本里使用{{$t("xxx")}} <span>{{$t(" ...

  5. chart.js angular组件封装(ng6)、实战配置、插件编写

    前言 项目需要使用chart.js插件,由于项目是使用angular开发,那么我第一步就是先把chart.js改造成angular组件来使用. 本项目代码都可以在github上下载:项目git地址 a ...

  6. vue axios拦截器 + 自编写插件 实现全局 loading 效果;

    项目需求:用自定义的 .gif 图标实现全局 loading 效果:为避免在每个页面手动添加,且简单高效的实现,经查阅资料,最终采用了 vue axios拦截器 + 自编写 loading 插件:下面 ...

  7. 自己封装 vue 组件 和 插件

    vue 组件 一.组件的创建,两种方法.(本质上是1.2两种,vue文件,只是创建了一个  组件选项对象,仅是一个js对象)1.定义组件:Vue.component('button-counter', ...

  8. vue.js组件化开发实践

    前言 公司目前制作一个H5活动,特别是有一定统一结构的活动,都要码一个重复的轮子.后来接到一个基于模板的活动设计系统的需求,便有了下面的内容.借油开车. 组件化 需求一到,接就是怎么实现,技术选型自然 ...

  9. VUE.JS组件化

    VUE.JS组件化 前言 公司目前制作一个H5活动,特别是有一定统一结构的活动,都要码一个重复的轮子.后来接到一个基于模板的活动设计系统的需求,便有了下面的内容.借油开车. 组件化 需求一到,接就是怎 ...

随机推荐

  1. Ta说:2016微软亚洲研究院第二届博士生论坛

    ​ "聚合多元人才创造无尽可能,让每一位优秀博士生得到发声成长机会"可以说是这次微软亚洲研究院博士生论坛最好的归纳了.自去年首次举办以来,这项旨在助力青年研究者成长的项目迅速得到了 ...

  2. nvm安装以及注意事项

    nvm初衷:由于以后的开发工作可能会在多个Node版本中测试,而且Node的版本也比较多,所以需要这么款工具来管理 1. 下载:[nvm-windows](https://github.com/cor ...

  3. ES6 常用知识点总结

    ES6常用知识总结 之前总结了es5中js的一些知识点.这段时间看了石川blue老师讲解的es6课程,结合阮一峰老师的es6教程,随手做了一些笔记和总结分享给大家.内容还是es6主要的知识点,基本没有 ...

  4. 【jQuery学习日记】jQuery实现滚动动画

    需要实现的效果 样式分析: 2个主要部分,头部的标题和导航部分,和主要的功能实现区域: 1.头部 <div id="header"> <h1>动漫视频< ...

  5. FCC 成都社区·技术周刊 第 14 期

    [前端] 1. React Fiber 架构 React16 启用了全新的架构,叫做 Fiber,其最大的使命是解决大型 React 项目的性能问题,再顺手解决之前的一些痛点. 详情:https:// ...

  6. centos7搭建ceph集群

    一.服务器规划 主机名 主机IP 磁盘配比 角色 node1 public-ip:10.0.0.130cluster-ip:192.168.2.130 sda,sdb,sdcsda是系统盘,另外两块数 ...

  7. vue_相同组件,不同url跳转不重新渲染的解决方法

    最近写的这个项目,有很多下拉菜单,每个菜单会有相应的两种类型.现在产品的需求是,跳转到不同的类型 需要页面重新渲染数据 那么问题来了. 我试了好几种方法,用watch监听路由去判断,但是发现输在inp ...

  8. Python进阶练习与爬取豆瓣T250的影片相关信息

    (一)Python进阶练习 正所谓要将知识进行实践,才会真正的掌握 于是就练习了几道题:求素数,求奇数,求九九乘法表,字符串练习 import re #求素数 i=1; flag=0 while(i& ...

  9. vue的computed计算属性

    computed可定义一些函数,这些函数叫做[计算属性] 只要data里面的数据发生变化computed会同步改变 引用[计算属性]时不要加  () ,应当普通属性使用 例:console.log(t ...

  10. R的plotmath

    plotmath plotmath {grDevices}:Mathematical Annotation in R # Copyright (C) 2002-2016 The R Core Team ...