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
  • 移動開發(一):使用.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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...