Vue組件化開發

来源:https://www.cnblogs.com/failte/archive/2019/08/26/11410159.html
-Advertisement-
Play Games

[TOC] Vue組件化開發 組件化開發: 1、組件化開髮指的是將複雜的業務拆分為一個有一個的組件 2、組件化開發的組件一般來說要靈活 3、組件化開發涉及到了Vue的js組件封裝,需要掌握Vue基礎、Vue實例方法與屬性、Vue.extend、Vue插件等知識 Vue實例方法與屬性 vm.$moun ...


目錄

Vue組件化開發

組件化開發:

1、組件化開髮指的是將複雜的業務拆分為一個有一個的組件
2、組件化開發的組件一般來說要靈活
3、組件化開發涉及到了Vue的js組件封裝,需要掌握Vue基礎、Vue實例方法與屬性、Vue.extend、Vue插件等知識

Vue實例方法與屬性

vm.$mount(el)
會將當前的組件掛載el元素上,該操作會替換當前的元素
若$mount中接收的el為空,則會掛載到當前的vue實例以外的地方
當vm對象中存在el時,會掛載到el上

vm.$el
返回當前掛載的元素

Vue.extend與Vue.Component

1、Vue.Component

定義了一個在Vue的掛載點下的一個全局組件

2、Vue.extend

定義了一個未掛載的組件類

可以接收一個組件作為當前組件類的模板

使用關鍵字new實例組件,可以接收參數,這個組件需要手動掛載

3、插件

Vue.use(Plugin, options)

Plugin:若為對象時,會查找並執行對象下的install方法,若為函數,會直接執行

options:傳遞到insntall函數中的參數

install函數的第一個參數是Vue,第二個參數為options

全局指定、組件、方法

import MyPlugin from ""
MyPlugin.install=(Vue, options)=>{

    // 添加全局組件
    Vue.component(MyPlugin.name, MyPlugin)

    // 掛載原型方法
    var Plugin = Vue.extend(MyPlugin)
    Vue.prototype.doPlugin = function(){
        var plugin = new Plugin({})
        document.body.appendChild(plugin.$mount().$el)
    }

    // 添加全局方法或屬性
    Vue.myGlobalMethod = function () { 
        // code
    }

    Vue.myGlobalProperty = 'property'

    // 添加全局資源 
    Vue.directive('my-directive', {
        bind (el, binding, vnode, oldVnode) { 
            // code
        }
        // code
    })

    // 註入組件選項 
    Vue.mixin({
        created: function () { 
            // code
        } ... 
    })
}
export default MyPlugin

實例:Popup插件的封裝

編寫:
src/components/Popup/Popup.vue

<template>
<div class='popup-container' v-if="status">
<div class="popup-content">
<div class="popup-title">{{title}}</div>
<div class="popup-msg">{{msg}}</div>
<a class="popup-btn" href="javascript: void(0)" @click="hidePopup">x</a>
</div>
</div>
</template>
<script>
export default {
    name: 'popup'
}
</script>
<style lang="scss">
    div.popup-container{
        position: fixed;
        top: 0;
        left: 0;
        width: 100vw;
        height: 100vh;
        background: rgba(33, 33, 33, .5);
        box-sizing: content-box;
        div.popup-content{
        position: absolute;
        top: 50%;
        left: 50%;
        margin: -150px -300px;
        background: #fff;
        width: 600px;
        height: 300px;
    }
    div.popup-title{
        width: 590px;
        height: 20px;
        padding: 5px;
        line-height: 20px;
        text-align: center;
        background: #3498db;
    }
    div.popup-msg{
        width: 588px;
        height: 239px;
        text-align: center;
        border: 1px solid #999;
        border-top: none;
        padding: 15px 5px;
    }
    a.popup-btn{
        position: absolute;
        top: 5px;
        right: 5px;
        display: block;
        width: 20px;
        height: 20px;
        line-height: 20px;
        font-size: 16px;
        text-align: center;
        text-decoration: none;
        color: #666;
        background: #f00;
    }
}
</style>

src/components/Popup/index.js

import Popup from './Popup.vue'
const defaultData = {
    status: false,
    title: 'Popup',
    msg: 'Message'
}
Popup.install = (Vue) => {
    let PopupCom = Vue.extend(Popup)
    console.log('PopupCom', PopupCom)
    Vue.prototype.$popup = function(params) {
        let popup = new PopupCom({
            el: document.createElement('div'),
            data() {
                for(let item in params){
                    defaultData[item] = params[item]
                }
                return defaultData
            },
            methods: {
                hidePopup() {
                    this.status = false;
                },
            },
        })
        console.log('popup', popup);
        console.log('popup.$mount()', popup.$mount());
        document.body.appendChild(popup.$mount().$el)
    }
}
export default Popup

使用:
src/main.js

import Vue from 'vue'
import App from './App.vue'

//引用並使用插件
import Popup from './components/Popup'
Vue.use(Popup)

new Vue({
    render: h => h(App),
}).$mount('#app')

src/main.js

<template>
<div id="app">
<img alt="Vue logo" src="./assets/logo.png">
<button @click="doit">do</button>
</div>
</template>
<script>
export default {
    name: 'app',
    methods: {
        //調用方法進行彈窗
        doit() {
            this.$popup({
                status: true
            })
        }
    },
}
</script>
<style lang="scss">
#app {
    text-align: center;
}
</style>

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Linux 系統中,存儲設主要有下麵幾種: DAS DAS 指 Direct Attached Storage,即直連附加存儲,這種設備直接連接到電腦主板匯流排上,電腦將其識別為一個塊設備,例如常見的硬碟,U 盤等,這種設備很難做到共用。 NAS NAS 指 Network Area Storag ...
  • MongoDB的一些高級語法 AND 和 OR操作 AND操作 OR操作 嵌入式文檔 插入 查詢 數組(Array)欄位 插入 查詢 聚合(Aggregation) 篩選數據 修改欄位 註意事項 包括現有欄位 取消_id欄位 排除欄位 分組操作 去重 分組操作運算 拆分數組 聯集合查詢 參考資料 M ...
  • 1.表與表之間的關係 2.為什麼要使用多張表 3.概念 4.分類 ANY關鍵字 ALL關鍵字 SOME關鍵字 IN關鍵字 ...
  • 一、簡述 截至到目前 (2019.04),HBase 有兩個主要的版本,分別是 1.x 和 2.x ,兩個版本的 Java API 有所不同,1.x 中某些方法在 2.x 中被標識為 過時。所以下麵關於 API 的樣例,我會分別給出 1.x 和 2.x 兩個版本。完整的代碼見本倉庫: + "Java ...
  • 安裝 第一步:打開網址,https://www.mysql.com,點擊downloads之後跳轉到https://www.mysql.com/downloads/選擇Community選項 第二步: 第一步結束後程式會跳轉到https://dev.mysql.com/downloads/網址,點擊 ...
  • AOP: 面向切麵編程,偏向於處理業務的某個階段 適用場景: 1. 參數校驗:網路請求前的參數校驗,返回數據的格式校驗等等 2. 無痕埋點:統一處理埋點,降低代碼耦合度 3. 頁面統計:幫助統計頁面訪問量 4. 事務處理:攔截指定事件,添加觸發事件 5. 異常處理:發生異常時使用面向切麵的方式進行處 ...
  • ConstraintLayout 不能正常顯示,因為其中一個控制項的約束屬性寫錯了 ...
  • jQuery返回的對象本質上是一個JavaScript對象,而入口模塊則可以保存對應的節點的引用,然後供其它模塊操作 我們創建jQuery對象時可以給jQuery傳遞各種不同的選擇器,如下: false ;返回一個空jQuery對象 DOM節點 ;返回包含該DOM元素引用的jQuery對象。 bod ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...