主頁 > 前端設計 > 近萬字Vue詳細基礎教程

近萬字Vue詳細基礎教程

2021-10-22 08:09:12 前端設計

目錄

1.1、概念(基于vue2)

1.2、vue/cli腳手架

1.2.1 創建專案啟動服務

1.2.2 專案目錄講解(可略過)

1.2.3 自定義配置

1.2.4 eslint

1.2.5 單vue檔案

1.3、插值運算式

1.4 、MVVM設計模式

1.5、Vue指令(重點,拿小本本記著)

1.5.1 概念

1.5.2 v-bind

1.5.3 v-on 系結事件

1.5.4 v-on事件修飾符

1.5.5 v-on按鍵修飾符

1.5.6 v-model

1.5.7 v-text和v-html

1.5.8 v-show和v-if

1.5.9 v-for


1.1、概念(基于vue2)

vue:vue是一個JavaScript的漸進式框架(漸進式是逐漸使用,集成更多的功能)

那庫跟框架又有啥區別呢?

庫是方法的集合,而框架是一套擁有自己的規則的語法

1.2、vue/cli腳手架

為啥要這個腳手架呢?

腳手架顧名思義就猶如蓋房子的腳手架,干啥的嘞,方便搭結構啊,webpack自己配置環境很麻煩, 下載@vue/cli包,用vue命令創建腳手架專案,

@vue/cli是Vue官方提供的一個全域模塊包(得到vue命令), 此包用于創建腳手架專案腳手架是為了保證各施工程序順利進行而搭設的作業平臺

好處:

  • 開箱即用,開袋即食
  • 0配置webpack打包工具(babel支持、css和less支持、開發服務器支持)

全域安裝命令:

  • yarn global add @vue/cli
  • npm install -g @vue/cli

安裝有時候有點慢,推薦用鏡像,快下完卡了那就真卡了,重下吧!!!

1.2.1 創建專案啟動服務

注意:專案名不能帶大寫字母,中文和特殊符號

創建vue專案步驟:

1、創建專案:vue create vuecli-demo(終端運行)

vue和create是命令, vuecli-demo是檔案夾名vue create vue-demo

2、選擇模板

  • 上下箭頭控制進行選擇vue版本,弄錯了 ctrl+c 重來
  • 選擇用什么方式下載腳手架專案所有的依賴包(有人下載了其他終端,這里需要選擇)

3、回車等待生成專案檔案夾+檔案+下載必須的第三方包

4、進入腳手架專案下,啟動內置的熱更新本地服務器

  1. cd vuecil-demo(你在終端創建好了也會有提示的)
  2. npm run serve或者yarn serve

    上圖一是選擇版本,圖二是選擇終端 ;

熱更新:簡單理解就是實時加載,作業區代碼發生改變,服務器重新渲染頁面

5、終端熱更新本地服務器成功圖片

這邊埠號是8888,默認埠號是8080,可以更改,

1.2.2 專案目錄講解(可略過)

 vuecil-demo        // 專案目錄
    ├── node_modules // 專案依賴的第三方包
    ├── public       // 靜態檔案目錄
      ├── favicon.ico// 瀏覽器小圖示
      └── index.html // 單頁面的html檔案(網頁瀏覽的是它)
    ├── src          // 業務檔案夾
      ├── assets     // 靜態資源
        └── logo.png // vue的logo圖片
      ├── components // 組件目錄
        └── HelloWorld.vue // 歡迎頁面vue代碼檔案 
      ├── App.vue    // 整個應用的根組件
      └── main.js    // 入口js檔案
    ├── .gitignore   // git提交忽略配置
    ├── babel.config.js  // babel配置
    ├── package.json  // 依賴包串列
    ├── README.md    // 專案說明
	└── yarn.lock    // 專案包版本鎖定和快取地址

重要的檔案:

  • node_modules下都是下載的第三方包
  • public/index.html – 瀏覽器運行的網頁
  • src/main.js – webpack打包的入口檔案
  • src/App.vue – vue專案入口頁面
  • package.json – 依賴包串列檔案

專案框架運行圖解

1.2.3 自定義配置

src并列處新建vue.config.js

/* 覆寫webpack的配置 */
module.exports = {
  devServer: { // 自定義服務配置
    open: true, // 自動打開瀏覽器
    port: 3000  //埠號(可改)
  }
}

1.2.4 eslint

eslint它是一個代碼檢查工具(建議新手前期還是關閉這東西,不然會一堆報錯,為什么呢,你代碼沒寫錯,它覺得你沒按照它的規范,哎就是錯了)

關閉eslint(可選,個人需求)

/* 覆寫webpack的配置 */
module.exports = {
  devServer: { // 自定義服務配置
    open: true, // 自動打開瀏覽器
    port: 3000  //埠號(可改)
  },
  lintOnSave:false//關閉exlint檢查
}

1.2.5 單vue檔案

單vue檔案好處, 獨立作用域互不影響

<!-- template必須, 只能有一個根標簽, 影響渲染到頁面的標簽結構 -->
<template>
  <div>歡迎使用vue</div>  <!--其它標簽只能放入div中-->
</template>

<!-- js相關 -->
<script>
export default {
  name: 'App'
}
</script>

<!-- 當前組件的style樣式, 設定scoped, 可以保證樣式只對當前頁面有效 -->
<style scoped>
</style>

vue檔案配合webpack, 把他們打包起來插入到index.html,然后在瀏覽器運行(用的時候記得清下不要的代碼,也就是vue宣傳代碼等)

1.3、插值運算式

在dom標簽中, 直接插入內容,又叫宣告式渲染文本插值,

<template>
  <div>
    <h1>{{ msg }}</h1>
    <h2>{{ obj.name }}</h2>
    <h3>{{ obj.age > 17 ? '成年' : '未成年' }}</h3> //不能用if陳述句,{{}}這里面只能放運算式
  </div>
</template>

<script>
export default {
  data() { // 函式,格式固定, 定義vue資料之處
    return {  // 需要回傳一個物件,key相當于變數名
      msg: "張三簡介",
      obj: {
        name: "小三三",
        age: 3
      }
    }
  }
}
</script>
<style></style>

注意:dom中插值運算式賦值, vue的變數必須在data里宣告(這里的data是函式不是物件,回傳的是物件)

1.4 、MVVM設計模式

注意:用資料驅動視圖改變, 操作dom的事,在vue原始碼內干了

好處:大大減少了DOM操作, 提高開發效率

MVVM,一種軟體架構模式,決定了寫代碼的思想和層次

  • M: model資料模型 (data里定義)
  • V: view視圖 (html頁面)
  • VM: ViewModel視圖模型 (vue.js原始碼)

MVVM通過資料雙向系結讓資料自動地雙向同步 不再需要操作DOM

  • V(修改視圖) -> M(資料自動同步)
  • M(修改資料) -> V(視圖自動同步)

注意:

  1. 在vue中,不推薦直接手動操作DOM!!!
  2. 在vue中,通過資料驅動視圖,不要在想著怎么操作DOM,而是想著如何操作資料!!(思想得轉變)

1.5、Vue指令(重點,拿小本本記著)

1.5.1 概念

給標簽屬性設定vue變數的值實質上就是特殊的 html 標簽屬性, 特點: v- 開頭,

總結:把vue變數的值, 賦予給dom屬性上, 影響標簽顯示效果,

注意:事件里面的this代表export default后面的組件物件(下屬有data里return出來的屬性)

1.5.2 v-bind

語法:v-bind:屬性名="vue變數"

簡寫::屬性名="vue變數"

<!-- vue指令-v-bind屬性動態賦值 -->

<a v-bind:href="url">我是a標簽</a>
<!--或-->
<img :src="imgSrc">
<template>
  <div>
    <a v-bind:href="hrefUrl">百度</a>
    <img :src="imgUrl">
  </div>
</template>

<script>

export default {
//data后面是函式不是物件
  data(){
    return {
      hrefUrl:'http://www.baidu.com',
      imgUrl:'https://webpack.docschina.org/site-logo.1fcab817090e78435061.svg'
    }
  }
}
</script>

<style>

</style>

1.5.3 v-on 系結事件

語法:

  1. v-on:事件名="要執行的少量代碼"
  2. v-on:事件名="methods中的函式"
  3. v-on:事件名="methods中的函式(實參)"

簡寫:@事件名="methods中的函式"

<template>
  <div>
      <p>商品數量:{{count}}</p>
      <button v-on:click="count=count+1">增加1</button>
      <button v-on:click="addFn">增加1</button>
      <button v-on:click="se_addFn(5)">增加5</button>
      <button @click="count=0">清零</button>
  </div>
</template>

<script>
export default {
    data(){
        return {
            count:1
        }
    },
    methods: {    //methods與data并列
        addFn(){
            this.count++;
        },
        se_addFn(number){
            this.count += number; 
        }
    },
}
</script>

<style>

</style>

常用@事件名, 給dom標簽系結事件

事件物件:vue事件處理函式中, 拿到事件物件

無傳參, 通過形參直接接收傳參, 通過$event指代事件物件傳給事件處理函式

<template>
  <div>
    <a @click="one" href="http://www.baidu.com">阻止百度</a>
    <hr>
    <!--如果傳入了其他形參,那么獲取事件物件的形參必須是$event-->
    <a @click="two(10, $event)" href="http://www.baidu.com">阻止去百度</a>
  </div>
</template>

<script>
export default {
  methods: {
    one(e){
      e.preventDefault()
    },
    two(num, e){
      e.preventDefault()
    }
  }
}
</script>

在這悄咪咪告訴你們,其實是有簡寫的,哈哈哈哈!!!

1.5.4 v-on事件修飾符

在事件后面.修飾符名 : 修飾符給事件擴展額外功能

語法:@事件名.修飾符="methods里函式"

修飾符類別:

  1. .stop - 阻止事件冒泡
  2. .prevent - 阻止默認行為
  3. .once - 程式運行期間, 只觸發一次事件處理函式
<template>
  <div @click="fatherFn">
    <!-- vue對事件進行了修飾符設定, 在事件后面.修飾符名即可使用更多的功能 -->
    <button @click.stop="btn">.stop阻止事件冒泡</button>
    <a href="http://www.baidu.com" @click.prevent="btn">.prevent阻止默認行為</a>
    <button @click.once="btn">.once程式運行期間, 只觸發一次事件處理函式</button>
  </div>
</template>

<script>
export default {
  methods: {
    fatherFn(){
      console.log("father被觸發");
    },
    btn(){
      console.log(1);
    }
  }
}
</script>

1.5.5 v-on按鍵修飾符

給鍵盤事件, 添加修飾符, 增強能力

語法:(不是只有下面這些

  1. @keyup.enter - 監測回車按鍵
  2. @keyup.esc - 監測回傳按鍵
<template>
  <div>
    <input type="text" @keydown.enter="enterFn">
    <hr>
    <input type="text" @keydown.esc="escFn">
  </div>
</template>

<script>
export default {
 methods: {
   enterFn(){
     console.log("enter回車按鍵了");
   },
   escFn(){
     console.log("esc按鍵了");
   }
 }
}
</script>

內置:

  • .enter
  • .tab
  • .delete(捕獲洗掉和退格鍵)
  • .esc
  • .space
  • .up
  • .down
  • .left
  • .right

有些按鍵(.esc以及所有方向鍵)在IE9有不同的key值,想支持IE9,這些內置的別名是首選

你還可以通過全域config.keyCodes物件自定義修飾符別名:

Vue.config.keyCodes.f1 = 112

新增系統修飾鍵:

  • .ctrl
  • .alt
  • .shift
  • .meta

太多了就不一一列舉了,不知道找度娘吧,哈哈哈哈!!!!

1.5.6 v-model

把value屬性和vue資料變數, 雙向系結到一起

  • 資料變化 -> 視圖自動同步
  • 視圖變化 -> 資料自動同步

語法:v-model="vue資料變數"

有修飾符語法:v-model.修飾符="vue資料變數"

  • .number 以parseFloat轉成數字型別
  • .trim 去除首尾空白字符
  • .lazy 在change時觸發而非inupt時
<template>
  <div>
    <input type="text" placeholder="用戶名" value="" v-model.trim="user" />
    <input type="password" placeholder="密碼" value="" v-model.number.trim="password" />
    <hr>
    <textarea name=""  cols="30" rows="10" v-model.lazy="motto"></textarea>
  </div>
</template>

<script>
export default {
    data() {
        return {
            user:'',
            password:'',
            motto:""
        }
    },
};
</script>

<style>
</style>

1.5.7 v-text和v-html

語法:

  • v-text="vue資料變數"
  • v-html="vue資料變數"
<template>
  <div>
      <p v-text="str"></p>
      <p v-html="str"></p>
  </div>
</template>

<script>
export default {
    data() {
        return {
            str:"<span>文本型別</span>"
        }
    },
}
</script>

<style>

</style>

運行結果如下:

1.5.8 v-show和v-if

語法:

  • v-show="vue變數"
  • v-if="vue變數"

原理(區別)

  • v-show 用的display:none隱藏 (頻繁切換使用)
  • v-if 直接從DOM樹上移除
<template>
  <div>
      <p v-show="isOk1">沖沖沖</p>
      <p v-if="isOk2">沖沖沖</p>
      <div>
          <p v-if="age>18">ok</p>
          <p v-else>no</p>
      </div>
      
  </div>
</template>

<script>
export default {
    data() {
        return {
            isOk1:false,
            isOk2:false,
            age:19,
        }
    },
}
</script>

<style>

</style>

v-else使用:v-if判斷不通過就執行v-else

1.5.9 v-for

語法:

  • v-for="(值, 索引) in 目標結構"
  • v-for="值 in 目標結構"
<template>
  <div>
    <li v-for="(value, index) in arr" :key="index">
      {{ value }}-------{{ index }}
    </li>
    <hr />
    <li v-for="(value, index) in tObj" :key="index">
      {{ index }}------{{ value }}
    </li>
    <hr />
    <li v-for="obj in stuArr" :key="obj.id">
      <span>{{ obj.name }}</span>
      <span>{{ obj.sex }}</span>
      <span>{{ obj.hobby }}</span>
    </li>
  </div>
</template>

<script>
export default {
  data() {
    return {
      arr: ["小明", "小歡歡", "大黃"],
      stuArr: [
        {
          id: 1001,
          name: "孫悟空",
          sex: "男",
          hobby: "吃桃子",
        },
        {
          id: 1002,
          name: "豬八戒",
          sex: "男",
          hobby: "背媳婦",
        },
      ],
      tObj: {
        name: "小黑",
        age: 18,
        class: "1期",
      },
      count: 10,
    };
  },
};
</script>

<style></style>

v-for有個好玩的,有些會使頁面更新,有些不會:

  • 陣列變更方法就會導致v-for更新,并且頁面更新;
  • 陣列非變更方法,回傳新陣列,就不會導致v-for更新,可采用覆寫陣列或this.$set()

變更的陣列方法:

  • push()
  • pop()
  • shift()
  • unshift()
  • splice()
  • sort()
  • reverse()

非變更方法:

  • slice()
  • filter()
  • concat()

基本指令已經差不多啦,后期繼續更新,拜拜咯!!!

轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/330342.html

標籤:其他

上一篇:vue - 實作省市區的級聯選擇

下一篇:javascript的基礎互動

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • vue移動端上拉加載

    可能做得過于簡單或者比較low,請各位大佬留情,一起探討技術 ......

    uj5u.com 2020-09-10 04:38:07 more
  • 優美網站首頁,頂部多層導航

    一個個人用的瀏覽器首頁,可以把一下常用的網站放在這里,平常打開會比較方便。 第一步,HTML代碼 <script src=https://www.cnblogs.com/szharf/p/"js/jquery-3.4.1.min.js"></script> <div id="navigate"> <ul> <li class="labels labels_1"> ......

    uj5u.com 2020-09-10 04:38:47 more
  • 頁面為要加<!DOCTYPE html>

    最近因為寫一個js函式,需要用到$(window).height(); 由于手寫demo的時候,過于自信,其實對前端方面的認識也不夠體系,用文本檔案直接敲出來的html代碼,第一行沒有加上<!DOCTYPE html> 導致了$(window).height();的結果直接是整個document的高 ......

    uj5u.com 2020-09-10 04:38:52 more
  • WordPress網站程式手動升級要做好資料備份

    WordPress博客網站程式在進行升級前,必須要做好網站資料的備份,這個問題良家佐言是遇見過的;在剛開始接觸WordPress博客程式的時候,因為升級問題和博客網站的修改的一些嘗試,良家佐言是吃盡了苦頭。因為購買的是西部數碼的空間和域名,每當佐言把自己的WordPress博客網站搞到一塌糊涂的時候 ......

    uj5u.com 2020-09-10 04:39:30 more
  • WordPress程式不能升級為5.4.2版本的原因

    WordPress是一款個人博客系統,受到英文博客愛好者和中文博客愛好者的追捧,并逐步演化成一款內容管理系統軟體;它是使用PHP語言和MySQL資料庫開發的,用戶可以在支持PHP和MySQL資料庫的服務器上使用自己的博客。每一次WordPress程式的更新,就會牽動無數WordPress愛好者的心, ......

    uj5u.com 2020-09-10 04:39:49 more
  • 使用CSS3的偽元素進行首字母下沉和首行改變樣式

    網頁中常見的一種效果,首字改變樣式或者首行改變樣式,效果如下圖。 代碼: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, ......

    uj5u.com 2020-09-10 04:40:09 more
  • 關于a標簽的講解

    什么是a標簽? <a> 標簽定義超鏈接,用于從一個頁面鏈接到另一個頁面。 <a> 元素最重要的屬性是 href 屬性,它指定鏈接的目標。 a標簽的語法格式:<a href=https://www.cnblogs.com/summerxbc/p/"指定要跳轉的目標界面的鏈接">需要展示給用戶看見的內容</a> a標簽 在所有瀏覽器中,鏈接的默認外觀如下: 未被訪問的鏈接帶 ......

    uj5u.com 2020-09-10 04:40:11 more
  • 前端輪播圖

    在需要輪播的頁面是引入swiper.min.js和swiper.min.css swiper.min.js地址: 鏈接:https://pan.baidu.com/s/15Uh516YHa4CV3X-RyjEIWw 提取碼:4aks swiper.min.css地址 鏈接:https://pan.b ......

    uj5u.com 2020-09-10 04:40:13 more
  • 如何設定html中的背景圖片(全屏顯示,且不拉伸)

    1 <style>2 body{background-image:url(https://uploadbeta.com/api/pictures/random/?key=BingEverydayWallpaperPicture); 3 background-size:cover;background ......

    uj5u.com 2020-09-10 04:40:16 more
  • Java學習——HTML詳解(上)

    HTML詳解 初識HTML Hyper Text Markup Language(超文本標記語言) 1 <!--DOCTYPE:告訴瀏覽器我們要使用什么規范--> 2 <!DOCTYPE html> 3 <html lang="en"> 4 <head> 5 <!--meta 描述性的標簽,描述一些 ......

    uj5u.com 2020-09-10 04:40:33 more
最新发布
  • 我的第一個NPM包:panghu-planebattle-esm(胖虎飛機大戰)使用說明

    好家伙,我的包終于開發完啦 歡迎使用胖虎的飛機大戰包!! 為你的主頁添加色彩 這是一個有趣的網頁小游戲包,使用canvas和js開發 使用ES6模塊化開發 效果圖如下: (覺得圖片太sb的可以自己改) 代碼已開源!! Git: https://gitee.com/tang-and-han-dynas ......

    uj5u.com 2023-04-20 07:59:23 more
  • 生產事故-走近科學之消失的JWT

    入職多年,面對生產環境,盡管都是小心翼翼,慎之又慎,還是難免捅出簍子。輕則滿頭大汗,面紅耳赤。重則系統停擺,損失資金。每一個生產事故的背后,都是寶貴的經驗和教訓,都是專案成員的血淚史。為了更好地防范和遏制今后的各類事故,特開此專題,長期更新和記錄大大小小的各類事故。有些是親身經歷,有些是經人耳傳口授 ......

    uj5u.com 2023-04-18 07:55:04 more
  • 記錄--Canvas實作打飛字游戲

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 打開游戲界面,看到一個畫面簡潔、卻又富有挑戰性的游戲。螢屏上,有一個白色的矩形框,里面不斷下落著各種單詞,而我需要迅速地輸入這些單詞。如果我輸入的單詞與螢屏上的單詞匹配,那么我就可以獲得得分;如果我輸入的單詞錯誤或者時間過長,那么我就會輸 ......

    uj5u.com 2023-04-04 08:35:30 more
  • 了解 HTTP 看這一篇就夠

    在學習網路之前,了解它的歷史能夠幫助我們明白為何它會發展為如今這個樣子,引發探究網路的興趣。下面的這張圖片就展示了“互聯網”誕生至今的發展歷程。 ......

    uj5u.com 2023-03-16 11:00:15 more
  • 藍牙-低功耗中心設備

    //11.開啟藍牙配接器 openBluetoothAdapter //21.開始搜索藍牙設備 startBluetoothDevicesDiscovery //31.開啟監聽搜索藍牙設備 onBluetoothDeviceFound //30.停止監聽搜索藍牙設備 offBluetoothDevi ......

    uj5u.com 2023-03-15 09:06:45 more
  • canvas畫板(滑鼠和觸摸)

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>canves</title> <style> #canvas { cursor:url(../images/pen.png),crosshair; } #canvasdiv{ bo ......

    uj5u.com 2023-02-15 08:56:31 more
  • 手機端H5 實作自定義拍照界面

    手機端 H5 實作自定義拍照界面也可以使用 MediaDevices API 和 <video> 標簽來實作,和在桌面端做法基本一致。 首先,使用 MediaDevices.getUserMedia() 方法獲取攝像頭媒體流,并將其傳遞給 <video> 標簽進行渲染。 接著,使用 HTML 的 < ......

    uj5u.com 2023-01-12 07:58:22 more
  • 記錄--短視頻滑動播放在 H5 下的實作

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 短視頻已經無數不在了,但是主體還是使用 app 來承載的。本文講述 H5 如何實作 app 的視頻滑動體驗。 無聲勝有聲,一圖頂百辯,且看下圖: 網址鏈接(需在微信或者手Q中瀏覽) 從上圖可以看到,我們主要實作的功能也是本文要講解的有: ......

    uj5u.com 2023-01-04 07:29:05 more
  • 一文讀懂 HTTP/1 HTTP/2 HTTP/3

    從 1989 年萬維網(www)誕生,HTTP(HyperText Transfer Protocol)經歷了眾多版本迭代,WebSocket 也在期間萌芽。1991 年 HTTP0.9 被發明。1996 年出現了 HTTP1.0。2015 年 HTTP2 正式發布。2020 年 HTTP3 或能正... ......

    uj5u.com 2022-12-24 06:56:02 more
  • 【HTML基礎篇002】HTML之form表單超詳解

    ??一、form表單是什么

    ??二、form表單的屬性

    ??三、input中的各種Type屬性值

    ??四、標簽 ......

    uj5u.com 2022-12-18 07:17:06 more