这种场景你可能需要把模态框包装成插件。vue插件开发和组件的区别 - 水秋玄​im.mkinit.com

vue插件和组件的区别

使用插件的方式包装组件和直接注册全局组件其实是一样的,都是注册组件。不同的是,一般组件我们是作为页面的某一块结构,按需引用,但是有些应用场景你可能会用到也可能用不到,总之就是你不知道什么时候会用到,总不能在每个页面都引用吧。再一个,控制组件需要传递props,也就是说每次引用都需要写方法才能达到控制的目的。

所以一般组件就不适合轻提示、加载动画、模态框这种随时需要的功能,所以需要把组件包装成插件,直接添加到页面上(一般是插入到body),再通过在vue的原型上添加全局功能,使用自定义的方法(api)来控制组件。

vue的组件就是组件,没有其他。但是插件不仅仅限于组件,它也可以包装过滤器、混入、自定义指令。这就是组件和插件的区别。

插件的开发(以轻提示为例子,同时也演示过滤器、混入、自定义指令)

不存在的目录自行创建

1、首先创建一个单文件组件(src/plugins/js2-vuepluginsdemo/js2-vuepluginsdemo.vue)

这就是一个普通的组件

{{message}}

export default {

name:'toast',

data(){

return {

show:false,

message:''

}

}

}

.fade-enter-active, .fade-leave-active {

transition: opacity .5s;

}

.fade-enter, .fade-leave-to /* .fade-leave-active below version 2.1.8 */ {

opacity: 0;

}

.toast{

position:fixed;

z-index:100;

left:50%;

top:50%;

transform: translate(-50%,-50%);

padding:1em 2em;

background-color:rgba(0,0,0,.9);

color:#FFF;

}

2、创建一个暴露install方法的模块(src/plugins/js2-vuepluginsdemo/js2-vuepluginsdemo.js)

这个插件包含了轻提示组件、混入、过滤、自定义指令这几个基本功能,都可以全局使用。

import toast_component from './js2-vuepluginsdemo.vue'

export default {

//插件需要暴露一个install方法作为回调函数,接收Vue和配置参数

install: (Vue, options) => { //options 是use时可以传递的参数

console.log(options)

/*

* 定义一个全局混入,混入到所有组件中

*/

Vue.mixin({

methods: {

sayhi() { //所有组件都拥有该方法

console.log(this, 'sayhi');

}

},

mounted() { //所有组件都会输出

this.sayhi()

}

})

/*

* toast 组件插件

*/

const component = Vue.extend(toast_component) //创建一个组件构造器

const toast = new component({

name:''

data: { //可通过构造时传参初始化数据

'js2': '我是通过构造器传递的参数'

}

}) //实例化组件

toast.$mount()//$mount 如果没有参数,模板将被渲染为文档之外的的元素,必须使用原生 DOM API 把它插入文档中。

document.body.appendChild(toast.$el)//手动插入到body

Vue.prototype.$toast = (msg, duration = 1500) => {//在Vue的原型上创建一个方法作为全局方法,操作的是组件中的data数据

toast.message = msg;

toast.show = true;

setTimeout(() => {

toast.show = false;

}, duration);

}

/*

* 定义一个全局指令

*/

Vue.directive('focus',{

inserted(ele){

ele.focus()

}

})

/*

* 定义一个全局过滤器

*/

Vue.filter('length',value=>{

return value.length

})

}

}

3、注册插件

在入口文件(main.js)中导入并注册插件:

import toast from './plugins/js2-vuepluginsdemo/js2-vuepluginsdemo.js'//导入插件

//import toast from 'js2-vuepluginsdemo'//通过npm下载的包这样引入

Vue.use(toast,{option:'我是通过use传入的参数'})//注册这个插件

4、在任何组件中都可以使用插件中的功能

在组件的mounted中调用提示:this.$toast('Welcome to Your Vue.js App',3000)

使用过滤:{{ msg | length }}

使用指令:

vue单文件props写法_vue开发中怎么按需加载需要被填入props和自定义事件的组件?...相关推荐

  1. Vue项目开发中使用路由懒加载

    Vue项目开发中使用懒加载 一.使用路由懒加载的好处 当打包项目时,JavaScript包会变的非常大,影响页面加载,要是通过把不同的路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载对应 ...

  2. vue中路由按需加载的几种方式

    使用vue-cli构建项目后,我们会在Router文件夹下面的index.js里面引入相关的路由组件,如: import Hello from '@/components/Hello' import ...

  3. .NET中的按需加载/延迟加载 LazyT

    业务场景: 在项目开发中,经常会遇到特定的对象使用的加载问题,有的实例对象我们创建之后并非需要使用,只是根据业务场景来调用,所以可能会导致很多无效的实例加载 延迟初始化出现于.NET 4.0,主要用于 ...

  4. webpack中实现按需加载

    当页面中一个文件过大并且还不一定用到的时候,我们希望在使用到的时候才开始加载这个文件俗称按需加载.这样可以减少页面的响应时间,提高访问速度. 使用webpack打包的出来的文件要实现以上的要求有两种方 ...

  5. AngularJS中的按需加载ocLazyLoad

    欢迎大家讨论与指导 : ) 初学者,有不足的地方希望各位指出 一.前言 ocLoayLoad是AngularJS的模块按需加载器.一般在小型项目里,首次加载页面就下载好所有的资源没有什么大问题.但是当 ...

  6. react按需加载(getComponent优美写法),并指定输出模块名称解决缓存(getComponent与chunkFilename)...

    react配合webpack进行按需加载的方法很简单,Route的component改为getComponent,组件用require.ensure的方式获取,并在webpack中配置chunkFil ...

  7. vue单文件props写法_详解Vue 单文件组件的三种写法

    详解Vue 单文件组件的三种写法 JS构造选项写法 export defaul { data, methods, ...} JS class写法 @Component export default c ...

  8. Vue 单文件组件||Vue 单文件组件的基本用法||webpack 中配置 vue 组件的加载器|| 在 webpack 项目中使用 vue

    Vue 单文件组件 传统组件的问题和解决方案 1. 问题 1. 全局定义的组件必须保证组件的名称不重复 2. 字符串模板缺乏语法高亮,在 HTML 有多行的时候,需要用到丑陋的 \ 3. 不支持 CS ...

  9. Vue单文件中引入背景图片时,四周有空白的问题

    Vue单文件中引入背景图片时,四周有空白的问题 问题背景 初始引入背景图 更新后的背景图设置 问题背景 近期公司有个管理系统前后端分离,但是前端人员不够,只能我们后端来凑,而在前端的开发过程中总是遇到 ...

最新文章

  1. 这种有序神经元,像你熟知的循环神经网络吗?
  2. java基础(八) 深入解析常量池与装拆箱机制
  3. Android串口通信apk源码
  4. c语言程序错误提示一个找不到,C语言编辑程序出现错误提示.doc
  5. linux下的进程间通信-管道及共享内存
  6. 中科大计算机竞赛夺冠,中科大斩获全国唯一特等奖,力压清华捧得华为毕昇杯...
  7. 2与27日 双目视觉系统,相机标定,矫正,匹配(特征,稠密),特征提取的方法,得到视差图
  8. 十六进制编辑器--HxD和FlexHex
  9. 移动端H5页面中加载的图片,在chrome和安卓手机中显示正常,在iphone和safari浏览器中个别图片显示问号的问题处理
  10. 爬虫 页面元素变化_爬虫项目案例讲解 案例二:定位、爬虫、定位页面元素、分别定位、简单处理抓取数据(有总结)...
  11. 微信推送消息遇到的坑 - 返回error code 40008,并且发送不成功
  12. 对Scrollbar实现平时隐藏,滑动时出现
  13. 柠檬班性能测试day05-0526-04环境安装配置
  14. 斐波那契数列 - 递推公式及通项公式 代码
  15. html控件透明与背景透明
  16. 【Android显示系统初探】surface初相识
  17. python连接企业微信数据库_python调用企业微信API
  18. smartdraw, visio的一个替代品
  19. IOS_QQ表情聊天
  20. c#+ArcgiEngine+postgresq无法连接到数据库,因为数据库客户端软件无法加载。确保已正确安装并配置数据库客户端软件。

热门文章

  1. Python中运算符 is 和 == 的区别
  2. java如何写外键关联_JAVA基础:Hibernate外键关联与HQL语法
  3. java复合数据类型_复合数据类型
  4. 数据结构与算法 / 数组(Array)
  5. 小明分享:Esp32下softAP+tcp_server的简单实现
  6. 工控服务器性能指标,PLC的7大性能指标
  7. python窗口化编程_python程序的窗口化
  8. js对当前时间的相关操作
  9. logback的使用和logback.xml详解[转]
  10. 使用OpenSSH远程管理Linux服务器