VUE基礎-第五天css
01-反饋html
姓名 意見或建議
*** 鋼哥 啥事漸進式框架
*** 剛哥~~你寫的函數裏面的形參通常都是有語義化的,有些分不清楚哪些是形參,哪些是固定寫法必需要這樣寫.前端
02-回顧vue
03-vue-cli-介紹webpack
04-vue-cli-安裝ios
安裝命令 npm i -g @vue/cligit
默認安裝最新版本,你安裝的將是 3.0 版本,使用的是3.0版本的命令github
可是企業中還有使用2.0版本的項目,2.0版本的命令和3.0版本是不同web
當你使用3.0時你有可能須要使用2.0的命令,須要安裝過渡工具 npm install -g @vue/cli-initvue-router
npm i -g cnpm
cnpm i -g @vue/cli cnpm i -g @vue/cli-init
npm un -g @vue/cli
05-vue-cli-建立項目
06-vue-cli-目錄解釋
07-vue-cli-生成代碼-render
render 渲染的意思
也是vue的選項
el 指定視圖
template 指定視圖內容
render 函數 渲染組件
new Vue({ el: '#app', render: h => h(App) }) // render: function (createElements) { // // createElements 建立元素 構建頁面結構 // // 參數 組件選項 // return createElements(App) // },
使用render渲染函數渲染App組件
即便在el中書寫了內容 最終render替換 使用的App的組件(根組件)
08-vue-cli-生成代碼-ES6模塊化
09-vue-cli-後綴.vue文件使用
使用步驟:
<template>
<div class="red">hello world {{msg}}</div>
</template>
<script>
export default {
name: 'HelloWorld',
data () {
return {
msg:'!!!!'
}
}
}
</script>
<style>
.red{
color: red;
}
</style>
複製代碼
注意:導出的時候 導出的是一個組件的配置對象
10-案例heroes-佈局分析
11-案例heroes-導入依賴資源
安裝 bootstrap cnpm i bootstrap@3.3.7
導入 main.js import '路徑'
運行的時候發現錯誤:字體文件沒法編譯
修改配置文件:webpack.config.js
rules選項再加一個配置
{
test: /\.(ttf|woff2|woff|eot)$/,
loader: 'file-loader',
options: {
name: '[name].[ext]?[hash]'
}
}
複製代碼
12-案例heroes-提取導航組件
13-案例heroes-提取側邊欄組件
同上
14-案例heroes-實現路由功能
<!--AppSlider.vue-->
<div class="list-group">
<router-link to="/heroes" class="list-group-item">英雄列表</router-link>
<router-link to="/equip" class="list-group-item">裝備列表</router-link>
<router-link to="/skill" class="list-group-item">技能列表</router-link>
</div>
<!--App.vue-->
<div class="col-md-10">
<!--顯示組件的位置-->
<router-view></router-view>
</div>
複製代碼
定義了三個vue文件 三個配置對象
// main.js
import Heroes from './components/Heroes'
import Equip from './components/Equip'
import Skill from './components/Skill'
複製代碼
路由規則
//定義路由規則
const routes = [
{path:'/heroes',component:Heroes},
{path:'/equip',component:Equip},
{path:'/skill',component:Skill}
]
複製代碼
實例化路由對象
//實例化路由對象 依賴vue-router
// npm i vue-router
// 導入
import VueRouter from 'vue-router'
// npm 安裝的 路由須要註冊在 Vue對象中
Vue.use(VueRouter)
// 使用
const router = new VueRouter({routes})
複製代碼
掛載
new Vue({
el: '#app',
router,
render: h => h(App)
})
複製代碼
15-案例heroes-提取路由模塊
新建router.js
// 封裝路由導出給main.js使用
import Vue from 'vue'
import Heroes from './components/Heroes'
import Equip from './components/Equip'
import Skill from './components/Skill'
//定義路由規則
const routes = [
{path:'/heroes',component:Heroes},
{path:'/equip',component:Equip},
{path:'/skill',component:Skill}
]
//實例化路由對象 依賴vue-router
// npm i vue-router
// 導入
import VueRouter from 'vue-router'
// npm 安裝的 路由須要註冊在 Vue對象中
Vue.use(VueRouter)
// 實例化
const router = new VueRouter({routes})
export default router
複製代碼
在main.js使用
import router from './router'
複製代碼
16-案例heroes-激活路由樣式
<style scoped>
/* scoped 讓樣式在只該組件下生效 */
/* AppSlider文件 加強優先級 */
a.list-group-item.router-link-exact-active,
a.list-group-item.router-link-active{
/*選中樣式 在active類裏面*/
z-index: 2;
color: #fff;
background-color: #337ab7;
border-color: #337ab7;
}
</style>
複製代碼
17-案例heroes-啓動接口服務
使用json-server來快速啓動接口服務
在某個目錄下 db.json文件
內容:
{ "heroes":[ {"id":100,"name":"亞索","gender":"男","ctime":"2019-04-17 15:00:00"} ] }
啓動服務 json-server --watch db.json
18-案例heroes-構建列表組件
<div class="wrapper">
<a href="heroes-form.html" class="btn btn-primary">添加英雄</a>
<hr>
<table class="table table-hover">
<thead>
<tr>
<th>ID</th>
<th>英雄名稱</th>
<th>英雄性別</th>
<th>建立時間</th>
<th>操做</th>
</tr>
</thead>
<tbody>
<tr>
<td>101</td>
<td>亞索</td>
<td>男</td>
<td>2019-02-10 10:50:12</td>
<td>
<button class="btn btn-success">編輯</button>
<button class="btn btn-danger">刪除</button>
</td>
</tr>
</tbody>
</table>
</div>
複製代碼
19-案例heroes-渲染列表
// 使用axios
// 安裝 npm i axios
// 導入
import axios from 'axios'
export default {
name: 'Heroes',
data () {
return {
list:[]
}
},
methods: {
getData () {
// 獲取英雄列表的數據
axios.get('http://localhost:3000/heroes')
.then(res => {
this.list = res.data
}).catch(err => alert('獲取英雄數據失敗'))
}
},
// 視圖渲染完畢
mounted () {
this.getData()
}
}
複製代碼
20-案例heroes-刪除功能
del (id) {
// 思路: 須要確認框
// 1. 獲取id
// 2. 發刪除請求
// 3. 若是成功 獲取後臺最新的列表數據 更新list 更新視圖
// 4. 若是失敗 提示
if(confirm('老鐵,確認刪除嗎')){
axios.delete('http://localhost:3000/heroes/' + id)
.then(res => {
this.getData()
}).catch(err => alert('刪除失敗'))
}
}
複製代碼
21-案例heroes-構建添加組件
22-案例heroes-綁定表單
23-案例heroes-添加功能
須要在 this.form添加一個建立時間的屬性
正常的去發送 post 請求
成功的時候 切換到 列表組件
編程式導航 this.$router.push('/heroes')
// 3. 發送請求 axsio.post('url',數據對象) this.form.ctime = new Date() axios.post('http://localhost:3000/heroes',this.form) .then(res=>{ // 4. 添加成功的時候 展現最新的列表 // 改變 url 標識符 列表路由的url地址 渲染對應的列表組件 獲取最新的屬性 新的列表 this.$router.push('/heroes') }).catch(err=>alert('添加失敗'))
24-案例heroes-構建編輯組件
25-案例heroes-編輯的動態路由配置
在點擊跳轉的事件:
toEdit (id) {
// 加參數 路徑參數 /heroes/edit/100
this.$router.push({name: 'heroesEdit', params: {id}})
}
複製代碼
在路由規則中加名字,修改爲動態路由規則
{path:'/heroes/edit/:id',name:'heroesEdit',component:HeroesEdit},
複製代碼
26-案例heroes-默認展現英雄數據
在組件渲染後 mounted函數中 獲取當前id對應的英雄數據
methods:{
getData(){
// 根據ID獲取英雄數據
const id = this.$route.params.id
// 發請求
axios.get('http://localhost:3000/heroes/'+id)
.then(res=>{
// 獲取數據成功 res.data 就是單個英雄數據
// 對象中包含 name gender id ctime
this.form = res.data
}).catch(err=>alert('獲取英雄數據失敗'))
}
},
mounted(){
this.getData()
}
複製代碼
視圖中修改
<form action="" method="post" role="form">
<legend>編輯英雄</legend>
<div class="form-group">
<label>英雄名稱</label>
<input type="text" class="form-control" v-model="form.name">
</div>
<div class="form-group">
<label>英雄性別</label>
<input type="text" class="form-control" v-model="form.gender">
</div>
<button type="submit" class="btn btn-primary">提交</button>
</form>
複製代碼
27-案例heroes-編輯功能
edit () {
// 修改英雄須要哪些數據
this.form.ctime = new Date()
axios.put('http://localhost:3000/heroes/' + this.form.id, this.form)
.then(res => {
//修改爲功 跳到列表組件
this.$router.push('/heroes')
}).catch(err => alert('修改失敗'))
}
複製代碼