通过npm引用的vue组件使用详解

前端之家收集整理的这篇文章主要介绍了通过npm引用的vue组件使用详解前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

什么是组件:组件是Vue.js最强大的功能之一。组件可以扩展HTML元素,封装可重用的代码。在较高层面上,组件是自定义的元素,Vue.js的编译器为它添加特殊功能。在有些情况下,组件也可以是原生HTML元素的形式,以is特性扩展。

如何注册组件?

需要使用Vue.extend方法创建一个组件,然后使用Vue.component方法注册组件。Vue.extend方法格式如下:

如果想要其他地方使用这个创建的组件,还得个组件命个名:

命名之后即可在HTML标签中使用这个组件名称,像使用DOM元素一样。

文章通过实现一个vue-dialog的弹出层组件,然后附加说明如果发布此包到npm,且能被其他项目使用。

功能说明

@H_301_22@
  • 多层弹出时,只有一个背景层。
  • 弹出层嵌入内部组件。
  • 弹出层按钮支持回调
  • 实现

    @H_
    301_22@
  • 多层弹出时,只有一个背景层
  • 利用两个组件实现,一个背景层组件(只提供一个背景层,组件名:background.vue),一个弹出层内容管理组件(实现多个内容层的管理,组件名:master.vue)。
  • 弹出层嵌入内部组件
  • 使用vue的component组件实现,他可以完美支持

    弹出层按钮支持回调

    在master.vue中实现,详细解析此代码

    HTML代码

    @H_301_22@
  • comps:内部组件的集合
  • realIndex:一个computed属性,读取props的mIndex属性,表示内部层的zIndex层级关系。
  • component加载组件
  • btns:表示按钮的集合,现还不支持组件独立配置按钮列表。
  • style:此方法用于生成内部组件居中的css代码
  • js代码:

    import hDialogBack from './background'

    function getclientPoint () {
    return {
    width: document.documentElement.clientWidth || document.body.clientWidth,height: document.documentElement.clientHeight || document.body.clientHeight
    }
    }

    export default {
    name: 'HDialog',data () {
    return {
    comps: []
    }
    },props: {
    'btns': {
    type: Array,default: function () {
    return [{ text: 'ok',value: 'ok'},{ text: 'cancel',value: 'cancel'}]
    }
    },'mIndex': {
    type: Number,default: 19861016
    }
    },computed: {
    realIndex: function () {
    return this.mIndex
    }
    },components: {
    hDialogBack
    },methods: {
    open: function (comp) {
    comp.promise = new Promise(function (resolve,reject) {
    comp.resolve = resolve
    comp.reject = reject
    })
    comp.width = comp.width || 600
    comp.height = comp.height || 400
    this.comps.push(comp)
    if (!this.$refs.back.show) {
    this.$refs.back.open()
    }
    return comp.promise
    },clickHandler: function (type,index) {
    let self = this
    let close = function () {
    self.comps.splice(index,1)
    if (self.comps.length === 0 && self.$refs.back.show) {
    self.$refs.back.close()
    }
    }
    /* 只提供promise模式 /
    comp.resolve({'type': type,'close': close})
    },style: function (index,comp) {
    let point = getclientPoint()
    return {
    zIndex: this.realIndex + index,width: comp.width + 'px',height: comp.height + 'px',left: ((point.width - comp.width) / 2) + 'px',top: ((point.height - comp.height) / 2) + 'px'
    }
    }
    }
    }

    @H_301_22@
  • open方法,用于打开弹出层,且返回一个Promise。
  • 嵌入background.vue组件,用于提供背景层。
  • clickHandler方法:master.vue组件按钮的事件响应函数,会resolve在open方法中提供的promise。
  • css代码

    .modal-content { position: absolute; }

    如何实用

    @H_301_22@
  • 首先需要在顶层引入master.vue,然后嵌入到与app组件平级,如下代码
  • ',components: { App } })

    一定要指定ref值,这是弹出层实现的关键。

    @H_301_22@
  • 在任意一个子组件中如下使用:
  • 第二层了
    ' }) promise.then(function (arg) { alert('第二层' + arg.type) arg.close() })
    @H_301_22@
  • 使用$root.$refs找到弹出层管理组件
  • 使用调用其open方法,并接受一个promise类型的返回值
  • 使用promise即可。
  • 发布到npm

    @H_301_22@
  • 如果组件需要被其他人引用,最好使用commonjs2规范,webapck如下配置:
  • @H_301_22@
  • 在npmjs上注册一个账号
  • 利用npm login 登录
  • 使用npm publish 发布,如果你想卸载可以用npm unpublish --force.
  • 发布是需要package.json检测version和name字段,如果已存,或者是存在被卸载的都不行。
  • package.json中的main节点是指定其他引用时,默认导出的文件
  • 以上所述是小编给大家介绍的通过npm引用的vue组件使用详解。编程之家 jb51.cc 收集整理的教程希望能对你有所帮助,如果觉得编程之家不错,可分享给好友!感谢支持

    猜你在找的Vue相关文章