API形式調用的VUE組件實現思路

需求

實現以 API 的形式調用自定義組件,可以在vue實例上下文中調用,也可以在普通js文件中調用。


需求分析

以上的需求到底有何應用場景
1:全局彈框
有時候我們需要要非vue的上下文環(huán)境中調出全局彈框,例如在異步接口調用的時候,有一些全局錯誤碼需要統一處理,這里如果要分散到接口調用的位置去處理顯然會有很多重復代碼。我們需要在接口文件中對錯誤碼錯中相應處理,如下所示:

 api().then((response) => {
    if(response.code === 'error'){
       //彈出錯誤提示框 
       toast("服務端錯誤")
    } 
 },(response)=>{
     //彈出錯誤提示框 
      toast("網絡錯誤")
 })

可以看出以上彈出錯誤提示框的位置最好是通過api的形式調用 并且 其不再vue的上下文環(huán)境中。

需求有了,那么該種形式的組件該如何實現呢?

實現原理

這里我們有一個普通的vue組價toast

/****toast.vue****/
<template> 
<div>this is toast</div>   
</template>
<script>
    export default {
        props: {
              
        },
        data () {
            return {
              
            }
        },
        created () {

        },
        mounted () {
          console.log("toast mounted")
        },
        beforeDestroy () {
          console.log("toast destroyed")
        }
    }
</script>
<style rel="stylesheet/scss" lang="scss">
    
</style>

當我們使用

toast from './toast'

時得到了一個對象:

{
    data: function(){
        return {
            
        }
    },
    props:{
        
    },
    render: function() {
        
    }
    ......
}

我們可以借助該對象來得到創(chuàng)建組件額構造函數

const ToastConstructor = Vue.extend(toast);

通過

var instance = new ToastConstructor({
        el: document.createElement('div') 
    });

得到組件實例。目前組件還沒能在頁面上渲染,我們通過

document.body.appendChild(instance.$el);//這里就是向body元素添加了子元素,而不依賴于某vue父組件。

使其渲染到頁面上。

另外我們可以改造一下.vue組件

/****toast.vue****/
<template> 
<div v-if="visible">this is toast</div>   
</template>
<script>
    export default {
        props: {
              
        },
        data () {
            return {
              visible: false
            }
        },
        created () {

        },
        mounted () {
          console.log("toast mounted")
        },
        beforeDestroy () {
          console.log("toast destroyed")
        }
    }
</script>
<style rel="stylesheet/scss" lang="scss">
    
</style>

通過visible控制彈出層組件的渲染與銷毀:

instance.visible = false //會將DOM元素刪除

封裝

在toast.js文件中對以上過程做進一步封裝即可實現以api形式調用的vue組件。

總結

vue給我們提供了靈活的使用方式,我們平時的開發(fā)可能只局限于.vue文件的封裝以及實現,但這并不代表vue的全部,我們要樂于嘗試自己沒有使用過的方式,進而對vue有更深入的理解。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 1、通過CocoaPods安裝項目名稱項目信息 AFNetworking網絡請求組件 FMDB本地數據庫組件 SD...
    陽明AI閱讀 16,201評論 3 119
  • 工具欄 UIToolbar和UITabbar是不同的,UIToolbar是一個工具欄,可以讓他需要的時候出現,不需...
    AmazingMiracle閱讀 2,400評論 0 0
  • 6月生日 還沒有到 7月辭職 還沒有到 8月騎行 還沒有到 現在就想死去了 為什么生命的長度不能贈予? 我贈予我剩...
    毛欣與小李閱讀 124評論 0 0

友情鏈接更多精彩內容