一、安裝node.jshtml
node做用:搭建後臺環境框架vue
下載地址:https://nodejs.org/en/downloadnode
node安裝成功後: node -v 查看node.js安裝的版本。webpack
二、安裝插件git
三、建立項目web
建立項目過程當中,除了vue-router是yes以外,其餘的所有是no。vue-router
四、環境配置vue-cli
五、最後在瀏覽器上輸入:http://localhost:8080。測試vue項目是否啓動成功。npm
目錄/文件 | 說明 |
---|---|
build | 項目構建(webpack)相關代碼 |
config | 配置目錄,包括端口號等。咱們初學可使用默認的。 |
node_modules | npm 加載的項目依賴模塊 |
src | 這裏是咱們要開發的目錄,基本上要作的事情都在這個目錄裏。裏面包含了幾個目錄及文件:json
|
static | 靜態資源目錄,如圖片、字體等。 |
test | 初始測試目錄,可刪除 |
.xxxx文件 | 這些是一些配置文件,包括語法配置,git配置等。 |
index.html | 首頁入口文件,你能夠添加一些 meta 信息或統計代碼啥的。 |
package.json | 項目配置文件。 |
README.md | 項目的說明文檔,markdown 格式 |
【擴展】:cnpm安裝:npm install -g cnpm -registry=https://registry.npm.taobao.org
說明:my-vue項目下 ->src -> components 下的 -> HellWorld.vue中去定義
//定義模板 <template> <div> html結構 </div> </template> //定義組件 <script> export default { name: 'HellWorld', //name默認的HellWorld.vue組件文件的名稱 組件配置項(data、methods等) } </script> //定義樣式 <style> #p .class{樣式} </style>
實戰如圖:
說明:以前咱們說 父組件中 有 子組件,經過父子關係,而後子組件的模板要在 父組件的模板的中才能使用,那咱們再一個項目中,如何才能實現父子組件的關係呢。由於在項目中,每個組件都是單獨的,都是一個 xxx.vue的文件。因此咱們今天就來學習一下。
一、建立子組件 item.vue
<template> <div> <img src="../assets/logo.png"/> <span>首頁</span> </div> </template> <script> export default { name: "item" } </script> <style> </style>
2.父組件(hello.vue)中導入子組件(item.vue)
說明:子組件的別名是本身隨便起的,這個不用刻意的去理解。import 子組件別名 from 組件路徑
<!--suppress ALL --> <template> <!--調用子組件--> <Item></Item> </template> <script> import Item from './item' //引入組件 import 子組件別名 from 組件路徑 export default { name: "hello", components: {Item} //設置子組件 } </script> <style scoped>
這邊注意了,這邊導入子組件能夠導入多個。
<script> import Item from './item' //引入組件 import 子組件別名 from 組件路徑 import Hello from './HelloWorld' .... export default { name: "hello", components: {Item,Hello,....} //設置子組件 } </script>
具體如圖:
其餘的使用方式,在父子組件使用是如出一轍的,只不過局部語法,好比,使用正向傳值(父組件的值傳遞給子組件),逆向傳值(子組件的值傳遞給父組件),具名槽口(slot),和匿名槽口等等。
咱們再定義須要經過簡單的邏輯判斷後,才能最終肯定值得變量,不須要在data中直接定義而後計算。兩種方式均可以。
語法以下:
<template> <div class="itemWarp" @click="fn"> <!--根據下面的computed的計算屬性,獲取bol的值--> <span v-show="bol"></span> </div> </template> <script> export default { name: "item", //在computed關鍵字定義計算屬性 computed: { bol: function () { //經過function函數中的計算 獲取返回 bol的值 //邏輯判斷語句 //返回true或者false 傳遞給bol這個變量 if (this.mark == this.sel){ return false; } return true; } } </script>
說明:使用正向傳值(父組件的值傳遞給子組件),逆向傳值(子組件的值傳遞給父組件),具名槽口(slot),和匿名槽口等知識。
父級HelloWorld.vue文件
<!--suppress ALL --> <template> <div class="tabbarWarp"> <!--sel:正向傳值,change=getVal是逆向傳值,getVal後面不能加括號--> <Item txt="首頁" mark="1" :sel="selected" @change="getVal"> <img src="../assets/logo.png" slot="nomalImg"/> </Item> </div> </template> <!--定義組件--> <script> import Item from "./item" export default { name: "HelloWorld", components: {Item}, data: function () { return { selected: 1 } }, methods: { //節後子組件傳遞過來的值 getVal: function (val) { this.selected = val; } } } </script> <!--定義樣式--> <style> .tabbarWarp{width: 100%;height: 64px;position: fixed;left: 0;} </style>
子級組件item.vue文件
<template> <div class="itemWarp" @click="fn"> <!--slot槽口是不能使用指令的,須要在槽口外層再包一層增長指令--> <span v-show="bol"><slot name="nomalImg"></slot></span> <span v-show="!bol"><slot name="activeImg"></slot></span> <span>{{ txt }}</span> </div> </template> <script> export default { name: "item", props: ['txt', 'mark','sel'], //mark外部傳入的一個值,sel接收正向傳值 //計算屬性,定義須要經過簡單的邏輯判斷後,才能最終肯定值得變量 computed: { bol: function () { //邏輯判斷語句 //返回true或者false if (this.mark == this.sel){ return false; } return true; } }, methods: { fn: function () { console.log(this.mark); console.log(this.sel); //逆向傳值,將當前點擊的item的mark值傳遞給父級,賦值給selected this.$emit('change',this.mark); } } } //給每一個item添加一個mark,做爲惟一標識 //聲明一個變量selected來作記錄被選中item的mark //1 2 3 4 5 selected:3 </script> <style> </style>