美文网首页
Vue调用式组件开发

Vue调用式组件开发

作者: 郝小淞 | 来源:发表于2018-11-28 16:42 被阅读0次

调用式组件

调用式组件这个名词应该不是官方的,因为在网上找了一大圈都没有发现这种组件的官方称呼,但是在很多开源的VueUI中都有这种组件存在,而且是一种很关键的组件。

例如Element UI 中的 Alert MessageBox Message Toast 等等等。

举个例子就很容易明白什么是调用式

new Vue({
  methods: {
    handleClick () {
      this.$alert('这是一个alert')
    }
  }
})

看完之后就发现超简单吧。

为什么要专门说它

emmm 因为在平常开发中写一个alert感觉怪怪的,但好像又没有什么问题!!!

那还是举个例子

<html>
<body>
  <div id="app">
    <div class="alert" v-if="isAlertOne"></div>
    <div class="alert" v-if="isAlertTwo"></div>
    <div class="alert" v-if="isAlertThree"></div>
  </div>
  <script>
    new Vue({
      data () {
        return {
          isAlertOne: false,
          isAlertTwo: false,
          isAlertThree: false,
        }
      }
    })
  </script>
</body>
</html>

平时开发的情形基本就如上述一样,通过data里面的数据控制,如果有多个alert那就要写特别特别多的列在一起,而data中要维护各种判断条件。如果alert中有一些其他的变量,那维护的东西就更乱了

稍微优化一点的是吧alert抽成组件,但还是避免不了的要把用到的alert组件都罗列到html中。

虽然可以实现alert的功能,但是有点反人类的感觉。

正常的逻辑是alert是什么样的,我调用的时候生成,关闭的时候就移除了。

如何开发调用式的组件

既然上面说到了种类组件要手动调用,而不是维护一大堆状态

看了下 element 源码,也自己实现了一个alert,放在了GIthub上。

// https://github.com/HaoYS/SongUI/blob/master/packages/alert/index.js
import Alert from './src/main.js'

Alert.install = function (Vue) {
    if(Vue.prototype.$alert) return 
    Vue.prototype.$alert = Alert
}

export default Alert
// https://github.com/HaoYS/SongUI/blob/master/packages/alert/src/main.js
import Vue from 'vue'
import Main from './main.vue'
const Alert = function (message, title, opt) {
    let Constructor = Vue.extend(Main)
    let alert = new Constructor({
        propsData: Object.assign({
            message, title
        }, opt)
    })
    alert.$mount()
    document.body.appendChild(alert.$el)
}

export default Alert
<template>
  <div class="alert" ref="wrapper">
    <div class="content">
      <div class="title">
        <span>{{title}}</span>
      </div>
      <div class="msg">
        <p>{{message}}</p>
      </div>
      <div class="button-group">
        <song-button @click="handleCancel">{{cancelButtonText}}</song-button>
        <song-button @click="handleConfirm">{{confirmButtonText}}</song-button>
      </div>
    </div>
  </div>
</template>
<script>
  import SongButton from '../../button/src/main.vue'
  //构造组件的选项
  export default {
    name: 'SongUIAlert',
    components: {SongButton},
    props: {
      title: {
        type: String,
        required: true
      },
      message: {
        type: String,
        required: true
      },
      callback: {
        type: Function
      },
      cancelButtonText: {
        type: String,
        default: '取消'
      },
      confirmButtonText: {
        type: String,
        default: '确定'
      }
    },
    methods: {
      handleCancel () {
        this.callback && this.callback('cancel')
        this.$el.remove()
      },
      handleConfirm () {
        this.callback && this.callback('confirm')
        this.$el.remove()
      }
    }
  }
</script>

通过上面的方法可以看到,比较规范的组件开发是通过在install方法中实现创建一个新的Vue组件实例。

而使用方法就是简单的

import Vue from 'vue'
import SongUI, { Button, Toast, Alert } from '../src/index'

// Vue.use(Button)
// Vue.use(Toast)
// Vue.use(Alert)
Vue.use(SongUI)

window.vm = new Vue({
    el: '#app',
    data() {
        return {
            msg: 'msg'
        }
    },
    methods: {
        handleAlert () {
            this.$alert('这是一个msg', '这是一个title', {
                callback: action => {
                    console.log(action)
                }
            })
        }
    }
})

相关文章

  • Vue调用式组件开发

    调用式组件 调用式组件这个名词应该不是官方的,因为在网上找了一大圈都没有发现这种组件的官方称呼,但是在很多开源的V...

  • Vue磨刀嚯嚯

    Vue开发风格——传统方法应用vue.js Vue开发风格——单个组件式 组件 基本操作 创建一个组件构造器 注册...

  • Vue:父子组件信息传递

    组件化开发是Vue的特色,同时也是未来前端开发的趋势,组件的相互调用也产生了组件沟通问题。在Vue1.X中我们使用...

  • vue 中使用 jsx 总结

    vue 中使用 jsx 调用方式 标签函数组件// 模式1: 类式函数组件const Sub = { fun...

  • Webpack(十七):webpack4+vue+route+v

    一:vue传值方式有哪些? 在vue项目开发过程中,经常会使用组件来进行项目开发,那么在组件中会调用另一个组件来作...

  • Vue子父组件方法互调

    讲干货,不啰嗦,大家在做vue开发过程中经常遇到父组件需要调用子组件方法或者子组件需要调用父组件的方法的情况,现做...

  • vue.js 核心知识点三

    目录 - 3.1 vue中子组件调用父组件的方法 - 3.2 Vue父组件调用子组件的方法 - 3.3 涉及到组件...

  • 前端开发者的福音!通过拖拽就可生成Vue代码的平台来了!

    Vue组件代码生成平台 Vue组件代码生成平台是一款面向Vue开发者的拖拽式组件代码生成工具。通过它可以快速搭建V...

  • 小程序开发 wepy/mpvue/uni-app/taro

    框架简介: wepy: 接近于 Vue.js,类Vue开发,支持组件 Props 传值,自定义事件、组件分布式复用...

  • vue 局部组件递归

    vue只有全局注册的组件才能递归调用吗? 最近在开发 npm 组件库,需要递归使用组件,组件间存在相互依赖关系。搜...

网友评论

      本文标题:Vue调用式组件开发

      本文链接:https://www.haomeiwen.com/subject/gfgaqqtx.html