用vue寫的頁面后綴名是“.vue”?!?vue”文件是一個(gè)自定義的文件類型,用類HTML語法描述一個(gè)Vue組件;一個(gè)vue文件就是一個(gè)組件。vue頁面有3個(gè)組成部分:1、模板(template),即template標(biāo)簽包裹的界面展示代碼(HTML代碼);2、script標(biāo)簽包裹的業(yè)務(wù)實(shí)現(xiàn)代碼(js腳本代碼);3、style標(biāo)簽包裹的界面樣式代碼(css樣式代碼)。
本教程操作環(huán)境:windows7系統(tǒng)、vue3版,DELL G3電腦。
用vue寫的頁面后綴名是“.vue
”。
.vue 文件是一個(gè)自定義的文件類型,用類 HTML 語法描述一個(gè) Vue 組件。每個(gè) .vue 文件包含三種類型的頂級(jí)語言塊 <template>、<script> 和 <style>,還允許添加可選的自定義塊:
<template> <div class="example">{{ msg }}</div> </template> <script> export default { data () { return { msg: 'Hello world!' } } } </script> <style> .example { color: red; } </style> <custom1> This could be e.g. documentation for the component. </custom1>
組件結(jié)構(gòu)講解
-
把每個(gè)組件都放到一個(gè)獨(dú)立的.vue文件里,
-
文件的后綴是:
.vue
文件 -
此文件三大部分:
template
、script
、style
-
template
-
寫html結(jié)構(gòu)的
-
注意這里的html部分必須用一個(gè)標(biāo)簽全包住
-
-
script
-
寫邏輯的,data、methods、生命周期鉤子、計(jì)算屬性等等代碼都寫在這個(gè)部分
-
注意這里的data不再是一個(gè)對(duì)象,在組件里,data將會(huì)是一個(gè)函數(shù),return一個(gè)對(duì)象。
-
-
style
-
寫樣式的
-
如何 導(dǎo)入外部css,
-
在css中的導(dǎo)入(主體使用):
@import url(./babel.css);
登錄后復(fù)制 -
-
-
快捷鍵快速生成:
<vue>
-
單文件組件的運(yùn)行
在cmd窗口該vue文件根目錄下輸入
vue serve index.vue
這里index.vue
是需要運(yùn)行的單文件組件的路徑vue serve index.vue
登錄后復(fù)制注意點(diǎn)
-
template里面的html部分必須用一個(gè)標(biāo)簽全包住
-
組件里沒有el,組件是無需掛載到哪的,里面已經(jīng)有template是它的使用的html了
-
data在組件里面是一個(gè)function,return 一個(gè)對(duì)象
-
<template> <!-- 組件html區(qū)域 在組件里面的html都必須有一個(gè)獨(dú)立的標(biāo)簽包住所有標(biāo)簽 --> <div> <button>按鈕</button> <button>{{msg}}</button> </div> </template> <script> export default { // 不再需要el去確定使用范圍 // 組件 里面的data將是一個(gè)函數(shù) return一個(gè)對(duì)象 //data:function(){return {}} data() { return { msg: "hello" }; }, methods: { alertEvent(value) { alert(value); } }, created() { //這里面語法檢測(cè)比較嚴(yán)格,直接寫console會(huì)報(bào)錯(cuò) window.console.log(this); // this.alertEvent(123); } }; </script> <style> /* 如果需要引入 外部css 在css中的導(dǎo)入: @import url(./babel.css); 在js中的導(dǎo)入 import "./babel.css" */ /* @import url(./babel.css); */ @import "./babel.css"; button { width: 100px; } </style>
如何在組件中引入其它組件
如何在一個(gè)組件中引入其它組件,實(shí)現(xiàn)一個(gè)組裝。
組件的使用三步
-
1:導(dǎo)入組件
-
import 自定義的一個(gè)組件名 from "組件路徑";
-
注意點(diǎn),這里組件路徑就算是當(dāng)前同一目錄也最好加上"./組件名",不然會(huì)報(bào)錯(cuò)
-
-
2:注冊(cè)組件
-
組件的使用是需要注冊(cè)的,注冊(cè)方式為:
export default { components: { 組件名, //注冊(cè)的組件都寫在components對(duì)象下。 } }
登錄后復(fù)制
-
-
3:使用組件(寫到相應(yīng)html位置即可)
<組件名></組件名> //該組件名來自于在組件注冊(cè)時(shí)的組件名
登錄后復(fù)制<template> <div class="main"> <!-- 使用組件 --> <!-- 在這index.vue是父組件,top,middle,bottom是子組件 --> <!-- top與middle是兄弟組件 --> <top></top> <middle></middle> <bottom></bottom> </div> </template> <script> // 導(dǎo)入組件 這里面top,middle,bottom是需要另外創(chuàng)建的vue組件,這里是沒創(chuàng)建的 import top from "./top.vue"; import middle from "./middle.vue"; import bottom from "./bottom.vue"; export default { // 組件注冊(cè) components: { top, //相當(dāng)于top:top middle, bottom } }; </script> <style> .main { width: 100%; } .main img { width: 100%; } </style>
登錄后復(fù)制
組件中如何使用外部插件
以axios為例
使用外部插件分為三步
-
裝包(安裝外部插件)
npm i axios //到相應(yīng)目錄下執(zhí)行該命令
登錄后復(fù)制 -
導(dǎo)包(在單文件組件中導(dǎo)入外部插件)
import axios from "axios"
登錄后復(fù)制 -
用包(在相應(yīng)代碼位置使用)
使用和以前一樣,該怎么用還是怎么用
axios({ url:"xxx" }).then(res=>{ })
登錄后復(fù)制DEMO
<template> <div> <input type="text" v-model="searchValue" /> <button @click="getMusic">點(diǎn)我</button> <ul> <li v-for="(item, index) in songs" :key="index">{{item.name}}</li> </ul> </div> </template> <script> // 使用axios 1:安裝axios,npm i axios 2:導(dǎo)包 import axios from "axios" 3:使用 // 導(dǎo)包 import axios from "axios"; export default { data() { return { searchValue: "", //input框的值 songs: [] }; }, methods: { getMusic() { // 使用,以前怎么用,現(xiàn)在還怎么用 axios({ url: "https://autumnfish.cn/search?keywords=" + this.searchValue, method: "get" }).then(res => { this.songs = res.data.result.songs; window.console.log(this.songs); }); } } }; </script> <style> </style>
登錄后復(fù)制
組件間的傳值
如果A組件中引入了B組件 ,這樣我們稱A組件為父組件,B為子組件
父組件傳值給子組件
-
在子組件標(biāo)簽上定義一個(gè)ref屬性
<組件名 ref="xxx"></組件名>
登錄后復(fù)制 -
在需要給子組件傳值的地方寫入:
this.$refs.xxx //這就代表了子組件xxx的vue實(shí)例 //這里xxx代碼標(biāo)簽中定義的ref屬性名這里就可訪問到子組件里面的data屬性與methods方法 //如要修改子組件里面data里的某個(gè)值: this.$refs.xxx.子組件里data屬性名 //如果需要調(diào)用子組件里面methods里某個(gè)方法: this.$refs.xxx.子組件里面methods里方法名
登錄后復(fù)制
子組件傳值給父組件
this.$parent //這就代表父組件的vue實(shí)例 //如要修改父組件里面data里的某個(gè)值: this.$parent.父組件里data屬性名 //如果需要調(diào)用父組件里面methods里某個(gè)方法: this.$parent.父組件里面methods里方法名
//兩個(gè)組件,這個(gè)是father.vue <template> <div> <button @click="btnClick">點(diǎn)我獲取數(shù)據(jù)</button> <div>你選中的當(dāng)前歌曲:{{localSong}}</div> <son ref="son" id="son"></son> </div> </template> <script> // 組件使用,導(dǎo)包,注冊(cè),使用 //1:導(dǎo)包 import axios from "axios"; import son from "./son.vue"; export default { data() { return { songs: [], localSong: "" }; }, //2:注冊(cè) components: { son }, methods: { btnClick() { window.console.log("ref訪問:", this.$refs.son.$el); window.console.log("原生訪問:", document.getElementById("son")); //要調(diào)接口,是不是要使用axios //裝包,導(dǎo)包,用包 axios({ url: "https://autumnfish.cn/search?keywords=神話&_t=" + Math.random() * 100 }).then(res => { // 父組件傳遞子組件值,在子組件上定義一個(gè)ref,通過this.$refs.名字,我們就能訪問子組件的實(shí)例,也就是可訪問子組件data屬性與methods方法 this.$refs.son.songs = res.data.result.songs; this.$refs.son.alertEvent(); window.console.log(res.data.result.songs); }); } } }; </script> <style> </style> //son.vue <template> <ul> <li v-for="(item, index) in songs" :key="index" @click="liCLick(item.name)">{{item.name}}</li> </ul> </template> <script> // 子組件訪問父組件里的data與methods更簡(jiǎn)單,只需要this.$parent就夠了 export default { data() { return { songs: [] }; }, methods: { liCLick(name) { this.$parent.localSong = name; window.console.log("訪問父組件:", name, this.$parent); }, alertEvent() { alert(123); } } }; </script> <style> </style>
Vue-cli項(xiàng)目創(chuàng)建
直通車
什么是腳手架
-
腳手架就是個(gè)項(xiàng)目模板 , 相當(dāng)于把整個(gè)文件基本目錄結(jié)構(gòu)搭好了,把必要的文件也建好 了,讓我們省了很多事情。
創(chuàng)建項(xiàng)目:
-
創(chuàng)建時(shí)路徑不要選錯(cuò),就是命令的路徑要是需要?jiǎng)?chuàng)建項(xiàng)目的文件夾下
-
完美選擇不出錯(cuò)路徑方法:在文件夾相應(yīng)路徑下的地址欄輸入cmd —再 回車
-
-
運(yùn)行創(chuàng)建命令
vue create 項(xiàng)目名 //這里項(xiàng)目名不要有中文,不要有大寫字母,不要搞特殊符號(hào),盡可能有意義 ,像普通變量命名一樣
登錄后復(fù)制 -
彈出的對(duì)話框先選擇默認(rèn)的選項(xiàng)(如下圖)
-
稍等一會(huì),等進(jìn)度條走完 提示如下畫面說明成功了,如下圖:
-
進(jìn)入項(xiàng)目文件夾(就是項(xiàng)目名的文件夾)
cd 項(xiàng)目名 直接根據(jù)提示即可
登錄后復(fù)制
-
運(yùn)行項(xiàng)目(根目錄,readme同級(jí)目錄)
npm run serve
登錄后復(fù)制
-
稍等片刻 ,出現(xiàn)如下效果說明成功了
Vue-cli項(xiàng)目結(jié)構(gòu)
項(xiàng)目結(jié)構(gòu)說明:
-
node_modules 第三方模塊包,也就是項(xiàng)目所需要用到的依賴包
-
public
-
favicon.ico 運(yùn)行項(xiàng)目時(shí)在網(wǎng)頁上顯示 的小圖標(biāo)
-
index.html 項(xiàng)目的頁面模板 ,也就是項(xiàng)目運(yùn)行最開始,是先執(zhí)行這個(gè)模板html的
-
-
src 項(xiàng)目開發(fā)主體就是在這個(gè)src目錄下面
-
assets 項(xiàng)目所需要的靜態(tài)資源,如css,圖片等文件
-
components 項(xiàng)目中的單文件組件都放這里
-
App.vue 入口組件 ,可以理解為一個(gè)項(xiàng)目就是一個(gè)app.vue的單文件組件,只不過里面包括了很多小組件
-
main.js 入口js文件,進(jìn)入項(xiàng)目會(huì)優(yōu)先執(zhí)行main.js以此來運(yùn)行app.vue
-
-
.gitignore 讓git忽略某些文件,文件夾
-
babel.config.js js編譯的設(shè)置,比如把高版本的js轉(zhuǎn)為低版本的js,讓項(xiàng)目達(dá)到更好兼容性
-
package-lock.json 項(xiàng)目模塊詳細(xì)信息,包括來源。
-
package.json 項(xiàng)目基本信息
-
README.md 項(xiàng)目說明
Vue-cli 入口文件main.js分析
-
main.js
中-
創(chuàng)建了最外層的
Vue
實(shí)例 -
把
App.vue
這個(gè)組件,當(dāng)做Vue
實(shí)例內(nèi)部的最頂級(jí)組件并渲染到index.html
上去
最后我們看到的整個(gè)網(wǎng)站其實(shí)就是
App.vue
-
【