[前端開發]Vue組件化的思想

来源:https://www.cnblogs.com/kaba/archive/2020/03/23/12551187.html
-Advertisement-
Play Games

組件化的思想 將一個頁面中的處理邏輯放在一起,處理起來就會很複雜,不利於後續管理和擴展。 如果將頁面拆分成一個個小的功能塊,每個功能塊實現自己的內容,之後對頁面的管理和維護就變得很容易了。 註冊組件的基本步驟 1.創建組件構造器 2.註冊組件 3.使用組件 //創建組件構造器對象 const cpn ...


組件化的思想

將一個頁面中的處理邏輯放在一起,處理起來就會很複雜,不利於後續管理和擴展。

如果將頁面拆分成一個個小的功能塊,每個功能塊實現自己的內容,之後對頁面的管理和維護就變得很容易了。

註冊組件的基本步驟

1.創建組件構造器
2.註冊組件
3.使用組件

//創建組件構造器對象
const cpnC = Vue.extend({
      template:`
        <div>
          <h2>hello world</h2>
          <p>hi world</p>
        </div>
      `
})

//註冊組件
Vue.component('my-cpn',cpnC)
    
//使用組件
<div id="app">
    <my-cpn></my-cpn>
</div>

全局組件

可以在多個Vue的實例下使用
Vue.component('my-cpn',cpnC)

局部組件

僅可以在當前Vue實例下使用

var vm = new Vue({
      el: '#app',
      data: {},
      methods: {},
      components:{
        mycpn: cpnC
      }
    });

父子組件

<script>
    const cpnC1 = Vue.extend({
      template:`
        <div>
          <h2>我是標題</h2>
          <p>我是內容,哈哈</p>
          </div>
      `
    })

    const cpnC2 = Vue.extend({
      template:`
        <div>
          <h2>我是標題2</h2>
          <p>我是內容2,呵呵呵</p>
          <cpn1></cpn1>
        </div>
      `,
      components:{
        cpn1:cpnC1
      }
    })
    
    var vm = new Vue({
      el: '#app',
      data: {},
      methods: {},
      components:{
        cpn2: cpnC2
      }
    });
  </script>
組件與組件之間存在層級關係

註冊全局組件 語法糖

Vue.component('cpn1',{
      template:`
        <div>
          <h2>我是標題</h2>
          <p>我是內容,呵呵呵</p>
        </div>
      `
    })

註冊局部組件 語法糖

var vm = new Vue({
      el: '#app',
      data: {},
      methods: {},
      components:{
        'cpn2' :{
          template:`
          <div>
           <h2>我是標題2</h2>
           <p>我是內容2,呵呵呵</p>
         </div>
         `
        }
      }
    });
省去了調用extend的步驟

組件模板抽離

1.通過script標簽, type="text/x-template"
<script type="text/x-template" id="cpn">
  <div>
    <h2>哈哈哈哈哈</h2>
    <p>歪比歪比</p>
  </div>
</script>

<script>
    Vue.component('cpn',{
      template: '#cpn'
    })
    var vm = new Vue({
      el: '#app',
      data: {},
      methods: {}
    });
</script>
1.通過template標簽
<template id='cpn'>
  <div>
    <h2>哈哈哈哈哈</h2>
    <p>歪比歪比</p>
  </div>
</template>

<script>
    Vue.component('cpn',{
      template: '#cpn'
    })
    var vm = new Vue({
      el: '#app',
      data: {},
      methods: {}
    });
</script>

組件可以訪問Vue實例的數據嗎?

不能,而且即使可以訪問,如果將所有數據都放在Vue實例中,Vue實例會變得非常臃腫

Vue組件應該有自己保存數據的地方
<template id='cpn'>
  <div>
    <h2>{{title}}</h2>
    <p>歪比歪比</p>
  </div>
</template>
  <script>
    Vue.component('cpn',{
      template: '#cpn',
      data(){
        return {
          title: 'abc'
        }
      }
    })
    var vm = new Vue({
      el: '#app',
      data: {},
      methods: {}
    });
  </script>

data(){}

為什麼組件中data必須是函數

組件是一個封閉的空間,每一個組件實例都有自己的狀態

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

-Advertisement-
Play Games
更多相關文章
  • 1. Android 7.1真機安裝調試apk時報錯,解析安裝包失敗 原因:sdk版本不支持7.1版本,需要調整minSdkVersion等參數,支持低版本 解決方法: android { compileSdkVersion 28 buildToolsVersion "29.0.3" default ...
  • 新聞/News 1. "Android 11有新玩法:雙擊手機背部截屏/進入多任務界面" 1. "Android 11 DP2證實了類似AirDrop的附近文件分享功能" 1. "谷歌發佈Camera Go:即使入門機也能有出色肖像模式" 1. "Android高級防護功能已限制非Play商店的應用 ...
  • 一、練習一個3D播放器 1.註意點:動畫中如果有和預設樣式同名的屬性,會覆蓋預設樣式中同名的屬性 2.在編寫動畫的時候,固定不變的值寫在前面,需要變化的值寫在後面 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <titl ...
  • 在app.json中可以設置所有文件的頭部導航顏色 (是window屬性的子屬性) 在具體頁面可以單獨設置該頁面的導航顏色 (直接寫該屬性,不需要寫window屬性) 查看官方文檔,可以看到好多全局屬性 而頁面配置會覆蓋部分window配置 在post.json中添加: { "navigationB ...
  • 已經許久沒有更新博客了,並不是疫情阻擋了我寫作的步伐,只是寫作已轉移到word(整理一下去換稿酬,拿了稿酬可以去換酒錢)。如下圖所示,書《Vue.2x實踐指南》交稿快半年了,由於疫情原因,預計下個月底才能上架,《Javascript實訓教程》已完成寫稿60%,《React和Mogodb實訓》籌劃中。 ...
  • 新建目錄 posts (閱讀頁面) 點擊目錄右鍵新建page 目錄結構如下: 在app.json中,把posts調整為預設顯示的頁面(暫時先這樣,具體的多頁面之後再說) { "pages": [ "pages/posts/posts", "pages/welcome/welcome" ], "win ...
  • JavaScript面向對象, 註意啦在這其實面向對象是一種編程的方式,它的思想是通用的,因此 我強烈的建議你去查看我在python,面向對象編程中做的筆記。 面向對象與面向過程 這裡還是相對比較容易理解的,這是兩種截然不同的編程方式。 | |面向過程 | 面向對象 | | : |: :| :| | ...
  • 一、Bootstrap Table列寬拖動的方法 Bootstrap Table可拖動列,需要用到它的Resizable擴展插件 需要引入 bootstrap-table擴展插件 bootstrap-table-resizable.js 這個插件還依賴於colResizable v1.6(下載地址: ...
一周排行
    -Advertisement-
    Play Games
  • 概述:在C#中,++i和i++都是自增運算符,其中++i先增加值再返回,而i++先返回值再增加。應用場景根據需求選擇,首碼適合先增後用,尾碼適合先用後增。詳細示例提供清晰的代碼演示這兩者的操作時機和實際應用。 在C#中,++i 和 i++ 都是自增運算符,但它們在操作上有細微的差異,主要體現在操作的 ...
  • 上次發佈了:Taurus.MVC 性能壓力測試(ap 壓測 和 linux 下wrk 壓測):.NET Core 版本,今天計劃準備壓測一下 .NET 版本,來測試並記錄一下 Taurus.MVC 框架在 .NET 版本的性能,以便後續持續優化改進。 為了方便對比,本文章的電腦環境和測試思路,儘量和... ...
  • .NET WebAPI作為一種構建RESTful服務的強大工具,為開發者提供了便捷的方式來定義、處理HTTP請求並返迴響應。在設計API介面時,正確地接收和解析客戶端發送的數據至關重要。.NET WebAPI提供了一系列特性,如[FromRoute]、[FromQuery]和[FromBody],用 ...
  • 原因:我之所以想做這個項目,是因為在之前查找關於C#/WPF相關資料時,我發現講解圖像濾鏡的資源非常稀缺。此外,我註意到許多現有的開源庫主要基於CPU進行圖像渲染。這種方式在處理大量圖像時,會導致CPU的渲染負擔過重。因此,我將在下文中介紹如何通過GPU渲染來有效實現圖像的各種濾鏡效果。 生成的效果 ...
  • 引言 上一章我們介紹了在xUnit單元測試中用xUnit.DependencyInject來使用依賴註入,上一章我們的Sample.Repository倉儲層有一個批量註入的介面沒有做單元測試,今天用這個示例來演示一下如何用Bogus創建模擬數據 ,和 EFCore 的種子數據生成 Bogus 的優 ...
  • 一、前言 在自己的項目中,涉及到實時心率曲線的繪製,項目上的曲線繪製,一般很難找到能直接用的第三方庫,而且有些還是定製化的功能,所以還是自己繪製比較方便。很多人一聽到自己畫就害怕,感覺很難,今天就分享一個完整的實時心率數據繪製心率曲線圖的例子;之前的博客也分享給DrawingVisual繪製曲線的方 ...
  • 如果你在自定義的 Main 方法中直接使用 App 類並啟動應用程式,但發現 App.xaml 中定義的資源沒有被正確載入,那麼問題可能在於如何正確配置 App.xaml 與你的 App 類的交互。 確保 App.xaml 文件中的 x:Class 屬性正確指向你的 App 類。這樣,當你創建 Ap ...
  • 一:背景 1. 講故事 上個月有個朋友在微信上找到我,說他們的軟體在客戶那邊隔幾天就要崩潰一次,一直都沒有找到原因,讓我幫忙看下怎麼回事,確實工控類的軟體環境複雜難搞,朋友手上有一個崩潰的dump,剛好丟給我來分析一下。 二:WinDbg分析 1. 程式為什麼會崩潰 windbg 有一個厲害之處在於 ...
  • 前言 .NET生態中有許多依賴註入容器。在大多數情況下,微軟提供的內置容器在易用性和性能方面都非常優秀。外加ASP.NET Core預設使用內置容器,使用很方便。 但是筆者在使用中一直有一個頭疼的問題:服務工廠無法提供請求的服務類型相關的信息。這在一般情況下並沒有影響,但是內置容器支持註冊開放泛型服 ...
  • 一、前言 在項目開發過程中,DataGrid是經常使用到的一個數據展示控制項,而通常表格的最後一列是作為操作列存在,比如會有編輯、刪除等功能按鈕。但WPF的原始DataGrid中,預設只支持固定左側列,這跟大家習慣性操作列放最後不符,今天就來介紹一種簡單的方式實現固定右側列。(這裡的實現方式參考的大佬 ...