vue-cli學習

来源:https://www.cnblogs.com/1jiayi/archive/2022/09/16/16700886.html
-Advertisement-
Play Games

vue3中,新增了 defineComponent ,它並沒有實現任何的邏輯,只是把接收的 Object 直接返回,它的存在是完全讓傳入的整個對象獲得對應的類型,它的存在就是完全為了服務 TypeScript 而存在的。 我都知道普通的組件就是一個普通的對象,既然是一個普通的對象,那自然就不會獲得自 ...


vue-cli使用

1.在終端下運行如命令 創建指定名稱的項目

vue create 項目名稱          * 創建一個新的cli項目

2.vue項目中的src目錄構成:

1.| assets 文件夾:存放項目中的靜態資源文件,例如css,圖片資源
2.|components 文件夾 程式員封裝的,可以復用的組件,都要放到components目錄下
3.|main.js 項目的入口文件 整個項目的運行,都要先執行main.js
4.|app.vue 是項目的根組件 寫的什麼結構就會顯示什麼結構

esline空格語法報錯

'space-before-function-paren': ['error', 'never']

組件

預設導出

 export default{} 定義script標簽必須要加  
// 導入需要使用的vue組件 
 export default{}

組件裡面的this標識當前組件的實例

如果想啟用css預編譯器 就在style標簽後面加上lang="less"

使用組件的步驟

  1. 使用import語法導入需要的組件

    import 組件 from '@/文件目錄'
    

2.使用components節點註冊組件

export default{ 
components:{
組件
  }
}

components

如果在聲明組件時沒有為組件指定name名稱,則組建的名稱預設就是註冊時候的名稱

3.以標簽的形式使用剛纔註冊的組件

<div> 
<組件></組件>
</div>

註冊全局組件

在vue項目的main.js入扣文件中 通過Vue.component()方法可以註冊全局組件 

示例代碼:

import Count from '@/component/Count.vue'

//參數1:字元串格式 表示組件的註冊名稱 
//參數2:需要被全局註冊的文件
Vue.component('MyCount',Count)

父子間的通信傳輸

props

props是自定義屬性,在封裝通用組建的時候,合理的使用props可以極大地提高組件的復用性

props是自定義屬性 ,數組形式,允許使用者通過自定義屬性為當前組件指定初始值

props:['init']

在調用組件的時候 通過下麵代碼,就可以調用自定義屬性props的值

<組件 init='props'><組件>

props中的數據可以直接在模板結構中被使用

props是只讀屬性的 不要直接修改props的值,否則會報錯

要想直接修改props的值,可以吧props的值轉存到data中,用this(指向當前組件),因為data里return的值是可讀可寫的

props中的default預設值

在聲明定義屬性是 可以通過default來定義屬性的預設值,示例代碼:

export default{ 
  props{ 
    自定義屬性1:{配置選項1}
    自定義屬性2:{配置選項2}
    自定義屬性3:{配置選項3}
    init{ 
      *如果使用init自定義屬性,沒有傳遞預設值,則使用default預設值*
      default:0
    }
  }
}

props的type值類型

export default{ 
  props{ 
    自定義屬性1:{配置選項1}
    自定義屬性2:{配置選項2}
    自定義屬性3:{配置選項3}
    init{ 
      *如果使用init自定義屬性,沒有傳遞預設值,則使用default預設值*
      default:0
      *規定props的值類型為number*
      type:Number
    }
  }
}

props的required屬性

required屬性設置為必填項,如果沒有則報錯

組件中的樣式衝突問題

在每個組件中的style中加入scoped屬性,及vue自動幫助在當前組件下所有的標簽加入data-v-不同的屬性
<style lang="less" scoped><style>

當有使用第三方組件庫,並且想修改預設樣式的需求,就可以用到/deep/

如果想給引用組件中的樣式單獨設置屬性 需要在屬性前面加入/deep/ 屬性

表示父元素子代選擇

<style lang="less" scoped>
.zs {
  padding: 0 20px 20px;
  background-color: lightskyblue;
  min-height: 250px;
  flex: 1;
}
/deep/ h4 {
  color: tomato;
}
</style>

生命周期

  1. 實例創建完成,掛載beforeCreate函數

  2. 載入的第二個階段,基本的porps,methods,data都已經載入完成,可以調用created函數

    created生命周期函數,經常在他的裡面調用methods中的方法,請求伺服器的數據,並且把請求中的數據轉存到data中,供template使用
    

    註意在created生命周期函數階段,不能操作dom

  3. 基於數據和模板,在記憶體中編譯生成html結構

beforeMount()將要吧記憶體中編譯好的html結構渲染到瀏覽器中,此時瀏覽器中還沒有當前組件的Dom結構,(幾乎沒什麼意義)

  1. mounted()生命周期函數已經把記憶體中的html結構渲染到瀏覽器之中,此時瀏覽器已經包含當前組件的DOM結構,是最早可以操作DOM的函數
    
  2. 當數據改變的時候,會調用beforeUpdate函數,將要根據數據變化過後,最新的數據,重新渲染到組件的模板結構,但是還沒有渲染到頁面上

  3. updated()函數階段,渲染已經得到的數據,完成渲染

當數據發生變化之後,為了能夠得到最新的DOM結構,必須將代碼寫到updated生命周期函數中

  1. beforeDestory()生命周期函數是將要銷毀組件,此時尚未銷毀,組件還處在正常工作中的狀態
  2. destory()組件已經完全銷毀!!!

組件之間的數據共用

父組件向子組件共用數據

父組件向子組件共用數據需要使用自定義屬性

在父組件中引用子組件 子組件添加屬性並把需要傳入的值賦值到屬性上,併在子組件中使用props接收,就可以在子組件中使用父組件的數據

    <Left :mess="message":users="userinfo"></Left>
  props: ['mess', 'users'],
    <p>父組件的message值是{{mess}}</p>
    <p>父組件的userinfo中的name值是{{users.name}}</p>

子組件向父組件共用數據

  1. 在父組件中調用子組件
      <Right @numChange="getNewNum"></Right>
  1. 在子組件中通過$emit方法讓父組件監聽到元素

          this.$emit('numChange', this.number)
    
  2. 在父組件中renturn{數據}然後通過函數方法調用子組件的數據

      return{numFromSon}
      methods: {
        getNewNum(val) {
          this.nunFromSon = val
        },
      },
    

兄弟組件中的共用數據

EventBus使用步驟

  1. 創建enentBus.js模塊,並向外共用一個vue的實例對象
  2. 在數據發送方,調用bus.$emit('事件名稱',要發送的數據)方法觸發自定義事件
  3. 在數據接收方,調用bus.$on('事件名稱','事件處理函數')方法註冊一個自定義事件

註意

在接收數據的時候,應該綁定在created()生命周期鉤子上

  1. import Vue from 'vue'
    export default new Vue()
    
  2. methods: {
       綁定的事件() {
         bus.$emit('share', this.需要傳出的值)
       },
     },
    
  3. created(val) {
      bus.$on('share', (val) => {
        this.mesFormList = val
      })
    },
    

ref引用

什麼是ref引用?

ref用來輔助開發者在不依賴與jquery的情況下,獲取DOM元素或者組件的引用

每個vue的組件實力上都包含一個'$'refs對象,裡面存儲著對應的DOM元素或者組件的引用,預設情況下,組件的$refs指向一個空對象

使用ref

在元素上綁定屬性 如:

<h1 ref="myh1"></h1>

然後通過vm實例來操作$refs

this.$refs.myh1.style.color="red"

使用ref引用組件實例

使用ref屬性 為對應的組件添加引用名稱

      <Left ref="comLeft"></Left>

然後在父組件中操作this調用refs

    changeLeft() {
      this.$refs.comLeft.num = 0
    },

動態組件

實現動態組件渲染

vue中提供了一個內置的組件,專門用來實現動態組件的渲染

      <component :is="Left"></component>

也可以通過data來定義要渲染的組件

      <component :is="comName"></component>
data(){
return{
//吧left組件動態渲染
comName:'Left'
}
}

標簽是vue內置的組件作用是占位符

is屬性的是是標識要渲染的組件名字

is屬性的值應該是在組件components節點下註冊名稱

keep-alive的使用

<keep-alive>
        <component :is="conName"></component>
</keep-alive>

keep-alive防止component切換組件被銷毀

keep-alive對應的生命周期函數

  • 當組件被緩存時,會自動觸發組建的deactivated聲明周期函數
  • 當組件被激活時,會自動觸發組建的activated聲明周期函數

當組件第一次被創建的時候,既會執行created生命周期函數,也會執行activated生命周期函數

當組件被激活時,只會觸發activated生命周期不會觸發created生命周期函數,因為組件沒有重新被創建

include

在keep-alive中include屬性可以說明哪些不被展示 語法格式如下

      <keep-alive include="Left">
多個組件用逗號隔開

exclude

表示誰不被緩存,不可以和include同時使用

name

當一個組件使用name屬性的時候.組建的名稱就是name屬性的值

對比

  1. 組件的註冊名稱主要應用場景是: 以標簽的形式,把註冊好的組件渲染和使用到頁面結構中去
  2. 組件聲明的時候name名稱主要應用場景是:結合keep-alive標簽實現組件緩存功能.以及在調試工具中看到組件的name名稱

插槽語法

 <slot></slot>

官方規定每一個slot插槽都有一個name名稱

如果省略了slot的name屬性,則有一個預設名稱叫做default

使用組件的時候,在中間插入標簽,都會在slot插槽之中

v-slot命令

v-solt命令只能使用在component組件中 或者template標簽中

自定義指令

在directives節點下聲明私有自定義指令

v-bind

在指令第一次綁定到元素上的時候 會立即觸發bind函數

update()

在DOM更新的時候 會觸發update函數

全局自定義指定

全局共用的自定義指令需要通過‘‘value.directive()’'進行聲明

路由

什麼是前端路由

路由就是hash地址與組件之間的對應關係

前端路由的工作方式

  1. 用戶點擊了頁面上的路由連接
  2. 導致了url地址欄中hash值發生變化
  3. 前端路由監聽了hash地址的變化
  4. 前端路由把當前hash地址對應的組件渲染到瀏覽器中

監聽hash值的變化

window.onhashchange=()=>{ 
console.log('監聽hash地址的變化',location.hash)
}

vue-router插件的使用

  • npm i [email protected] -S

  • 在src目錄下新建router文件夾 裡面創建index.js路由模塊

  • 初始化代碼

  • // 1. 導入Vue和VueRouter 的包 
    import Vue from 'vue'
    import VueRouter from 'vue-router'
    
    //調用Vue.use()函數 吧VueRouter安裝為Vue的插件 
    
    Vue.use(VueRouter)
    
    //創建路由的實例對象 
    const router = new VueRouter()
    
    //向外共用路由實例對象 
    export default router
    
  • 在main.js中導入路由模塊,然後通過實例對象,進行掛載

  • //導入路由模塊
    import router from '@/router/index.js'
    
    new Vue({
      render: h => h(App),
      // router 路由實例對象
      router
    }).$mount('#app')
    
    
  • 在路由模塊(index.js)中導入需要的組件,然後在實例對象中通過routes來定義hash地址與組件之間的對應關係

  • // 導入需要的組件
    import About from '@/components/About.vue'
    import Home from '@/components/Home.vue'
    import Movie from '@/components/Movie.vue'
    
    
    //創建路由的實例對象 
    const router = new VueRouter({
      // routes是一個數組, 作用是定義hash地址與組件之間的對應關係
      routes: [
        { path: '/home', component: Home },
        { path: '/movie', component: Movie },
        { path: '/about', component: About }
      ]
    })
    

router路由的基本用法

作用就是占位符,只要安裝配置了vue-router就可以使用這個組件標簽了

 <router-view></router-view>
    <!-- 當配置和安裝vue-router了就可以用router-link來替代普通的a鏈接 -->
    <router-link to="/home">首頁</router-link>
    <router-link to="/movie">電影</router-link>
    <router-link to="/about">關於</router-link>

路由的重定向

路由重定向是指用戶在訪問地址A的時候,強制跳轉到地址C,從而展示特定的組件頁面,通過路由規則的redirect屬性,指定一個新的路由

    { path: '/', redirect: '/home' }

子級路由重定向

  ]
    {
      path: '/about', component: About, redirect: '/about/tab1', children: [
        { path: '/about/tab2', component: Tab2 },
        { path: '/about/tab1', component: Tab1 },
      ]
    },

子級路由預設子路由

如果children數組中,某個路由規則的path值為空,則這條路由規則,就叫做預設子路由

嵌套路由

通過children屬性 嵌套聲明的子級路由規則

router-link聲明子級路由時帶上父級的路由地址

<router-link to="/about/tab1">tab1</router-link>
    <router-link to="/about/tab2">tab2</router-link>


{
      path: '/about',
      component: About,
      //通過children屬性 嵌套聲明的子級路由規則
      children: [
        { path: '/about/tab2', component: Tab1 },
        { path: '/about/tab1', component: Tab2 },
      ]
    }

動態路由

動態路由是指吧Hash地址中可變的參數定義為參數項,從而提高路由規則的復用性,在vue-router中使用英文的冒號,來定義陸游的參數項

要想在路由模塊中接收到porps傳參,需要在配置中加入props:true 開啟props傳參

    { path: '/movie/:id', component: Movie, props: true },
     組件中加入props數據
     props:['id' ]
     

this.$route 式路由的參數對象

this.$router 是路由的導航對象

聲明式導航 和 編程式導航

點擊鏈接實現的導航方式叫做聲明式導航

在瀏覽器中調用api實現的導航方式,叫做編程師導航

  • 普通網頁中調用location.herf跳轉到新頁面的方式,屬於編程式導航

vue-router中的編程式導航

vue-router中的導航方式:

  1. this.$router.push(‘hash地址’)
    • 跳轉到指定的hash地址,並增加一條歷史記錄
  2. this.$router.replace(‘hash地址’)
    • 跳轉到指定的hash地址,並替換掉當前的歷史記錄
  3. this.$router.go(數值n)
    • 在瀏覽地址中前進或者後退一個頁面
    • 如果只要前進或者後退一層 可以用$router.back()和 $router.forward()

路由守衛

router.beforeEach(function (to, from, next) {

 if (to.path === '/home') {

  *const* token = localStorage.getItem('token')

  if (token) {

   next()

  } else {

   next('/login')

  }

 } else {

  next()

 }

})

vant的使用方法

在cmd中引用插件

然後在index.js中加入

按需引入

import { Button } from 'vant'

Vue.use(Button)

引入樣式

import ``'vant/lib/index.css'

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

-Advertisement-
Play Games
更多相關文章
  • 8月27日,ChunJun社區與OceanBase社區聯合組織的開源線下Meetup成功舉辦,會上重磅發佈了「OceanBase&ChunJun:構建一體化數據集成方案」。 這是OceanBase&ChunJun聯合解決方案的首次發佈,將針對分庫分表的實時數據集成、跨集群/租戶的數據集成、不同數據源 ...
  • 到底什麼是metadata lock?這個鎖等待是如何產生的?會帶來什麼影響?最後又如何來解決?今天我們挑6個常見問題給大家解答一下。 ...
  • ​ 回顧數據倉庫的發展歷程,大致可以將其分為幾個階段:萌芽探索到全企業集成時代、企業數據集成時代、混亂時代--"數據倉庫之父"間的論戰、理論模型確認時代以及數據倉庫產品百家爭鳴時代。 數據倉庫理論發展歷程 上世紀70年代,IBM的E.F.Codd等人提出關係型資料庫後,MIT的研究員提出單獨構建分析 ...
  • redis集群的搭建 redis集群的三種模式 主從複製 哨兵模式 cluster集群 redis-cluster集群的搭建(在一臺linux中搭建,三主三從) 下載安裝redis5.0.3 cd /opt 下載redis安裝包 wget http://download.redis.io/relea ...
  • Appuploader可以輔助在Windows、linux或mac系統直接申請iOS證書p12,及上傳ipa到App Store,最方便在Windows開發上架沒有蘋果Mac電腦的開發者!配合本教程使用,可以快速掌握如何真機測試及上架! 點擊蘋果證書 按鈕 點擊新增 ​ 輸入證書密碼,名稱 這個密碼 ...
  • 移動端中的元素內容超出時,對容器設置overflow-x: auto就可以通過手勢水平移動。但是 PC 端只能通過滑鼠滾輪上下滑動,而不能水平移動。 只需要給元素添加一個監聽滑鼠滾輪事件,上下滑動時修改其 scrollLeft 屬性值就可以實現。直接貼上代碼: <div class="horizon ...
  • 好家伙, 我的飛機大戰部署上線了 胖虎的飛機大戰 感興趣的可以去玩一下 (怕有人接受不了這個背景,我還貼心的準備切換背景按鈕,然而這並沒有什麼用) 現在,我們停下腳步,重新審視這個游戲 現在基本的框架都弄出來了,敵機,英雄,子彈,分數,生命 但是,這個“游戲“有個非常致命的問題, 他不好玩,(不好玩 ...
  • 本文分別使用 SFC(模板方式)和 tsx 方式對 Element Plus *el-menu* 組件進行二次封裝,實現配置化的菜單,有了配置化的菜單,後續便可以根據路由動態渲染菜單。 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 在我們開發過程中基本上不可或缺的用到一些敏感機密數據,比如SQL伺服器的連接串或者是OAuth2的Secret等,這些敏感數據在代碼中是不太安全的,我們不應該在源代碼中存儲密碼和其他的敏感數據,一種推薦的方式是通過Asp.Net Core的機密管理器。 機密管理器 在 ASP.NET Core ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 順序棧的介面程式 目錄順序棧的介面程式頭文件創建順序棧入棧出棧利用棧將10進位轉16進位數驗證 頭文件 #include <stdio.h> #include <stdbool.h> #include <stdlib.h> 創建順序棧 // 指的是順序棧中的元素的數據類型,用戶可以根據需要進行修改 ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • C總結與剖析:關鍵字篇 -- <<C語言深度解剖>> 目錄C總結與剖析:關鍵字篇 -- <<C語言深度解剖>>程式的本質:二進位文件變數1.變數:記憶體上的某個位置開闢的空間2.變數的初始化3.為什麼要有變數4.局部變數與全局變數5.變數的大小由類型決定6.任何一個變數,記憶體賦值都是從低地址開始往高地 ...
  • 如果讓你來做一個有狀態流式應用的故障恢復,你會如何來做呢? 單機和多機會遇到什麼不同的問題? Flink Checkpoint 是做什麼用的?原理是什麼? ...
  • C++ 多級繼承 多級繼承是一種面向對象編程(OOP)特性,允許一個類從多個基類繼承屬性和方法。它使代碼更易於組織和維護,並促進代碼重用。 多級繼承的語法 在 C++ 中,使用 : 符號來指定繼承關係。多級繼承的語法如下: class DerivedClass : public BaseClass1 ...
  • 前言 什麼是SpringCloud? Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的開發便利性簡化了分散式系統的開發,比如服務註冊、服務發現、網關、路由、鏈路追蹤等。Spring Cloud 並不是重覆造輪子,而是將市面上開發得比較好的模塊集成進去,進行封裝,從 ...
  • class_template 類模板和函數模板的定義和使用類似,我們已經進行了介紹。有時,有兩個或多個類,其功能是相同的,僅僅是數據類型不同。類模板用於實現類所需數據的類型參數化 template<class NameType, class AgeType> class Person { publi ...
  • 目錄system v IPC簡介共用記憶體需要用到的函數介面shmget函數--獲取對象IDshmat函數--獲得映射空間shmctl函數--釋放資源共用記憶體實現思路註意 system v IPC簡介 消息隊列、共用記憶體和信號量統稱為system v IPC(進程間通信機制),V是羅馬數字5,是UNI ...