We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
modal 是前端开发中普遍且高频的组件之一,很多UI框架中都会实现modal 来增强实践中的交互,但是都没有达到我想要的,因为开发管理后台类页面时modal 形式多变,而且会相互嵌套,这样的话对可定制性有很大的要求
vuejs-modal Demo
this.$modal[modal名]()
this.$modal[modal名](params)
vue 提供use 函数来让我们安装插件
vue.use(plugin, options)
plugin 可以是object 也可以是function,如果是object 那么需要提供install 方法,如果是function 那么这个function 就是install,use 还提供了options 参数,options 在install 方法中可以获取到
// vuejs-modal.js var Modal = { /** * * * @param {Function} Vue * @param {{name?: string, id?: string, modals: object, style?: object}} options */ install: function (Vue, options) { } }
install 第一个参数是vue 构造函数,第二个options 就是use 的时候传的options,有了vue 构造函数我们可以做很多事了,我们来是实现下$modal
// vuejs-modal.js install: function (Vue, options) { // 定义一个defaultOptions 来初始默认的属性 // 可以通过options 来覆盖掉默认的属性 var defaultOptions = Object.assign({ name: '$modal', //使用this 调用的插件名,默认是$modal id: 'modal', //html 页面上初始化的div id 名,默认是modal modals: null, //默认的modals,初始是没有的,需要传参,如果没有会报错 style: { position: 'fixed', top: 0, left: 0, right: 0, bottom: 0, zIndex: 1000 } // 默认的样式,zIndex 是递增的 }, options) },
核心:
// 声明一个modals 空间 let modals = Vue.prototype[defaultOptions.name] = {}; // 绑定modal Object.keys(defaultOptions.modals).forEach(v => { /** * * * @param {object} options * @returns */ modals[v] = options => { return new Promise((resolve, reject) => { try { new Vue({ render: h => h(defaultOptions.modals[v], { // 每个modal提供options参数,参数会传递给props props: options, style: Object.assign(defaultOptions.style, { zIndex: this.zIndex }), // 默认提供两个事件$on 和$cancel,$on 会resolve,$cancel 会reject // $on 需要参数$el 来remove 调modal,$cancel 同理 on: { $ok: function ($el, info) { $el.remove() resolve(info) }, $cancel: function ($el, info) { $el.remove() reject(info) } } }) }).$mount('#' + defaultOptions.id) } catch (error) { console.error('vuejs-modal', error) } }) } })
new vue()
var div = document.createElement('div'); div.setAttribute('id', 'modal'); document.getElementsByTagName('body')[0].appendChild(div)
this.$el传递进来
The text was updated successfully, but these errors were encountered:
很棒哦
Sorry, something went wrong.
@tflower 谢谢,小东西,没有技术含量的,纯业务驱动
请问这需要vue什么版本
@wangshuai99 2+
顶一个,期待更多分享
No branches or pull requests
前言
modal 是前端开发中普遍且高频的组件之一,很多UI框架中都会实现modal 来增强实践中的交互,但是都没有达到我想要的,因为开发管理后台类页面时modal 形式多变,而且会相互嵌套,这样的话对可定制性有很大的要求
项目地址
vuejs-modal
Demo
预期目标
this.$modal[modal名]()
来调用this.$modal[modal名]()
是个promise,可以根据它的状态来得到modal 上的状态(确定或者取消等)this.$modal[modal名](params)
来传参复用modal实现
vue 提供use 函数来让我们安装插件
plugin 可以是object 也可以是function,如果是object 那么需要提供install 方法,如果是function 那么这个function 就是install,use 还提供了options 参数,options 在install 方法中可以获取到
install 第一个参数是vue 构造函数,第二个options 就是use 的时候传的options,有了vue 构造函数我们可以做很多事了,我们来是实现下$modal
核心:
问题
new vue()
的方式来变相的compile,但是需要建坑this.$el传递进来
,后来想了想还是插件关闭,这样的话使用者可以少写一行代码,后续可能会有所调整The text was updated successfully, but these errors were encountered: