vue.cli(腳手架)安裝
1,檢查NODE版本,確保在4以上穩定版本
2,npm install -g vue-cli
3,vue list查到可安裝的模板,webpack
4,vue init [模板名字webpack] [項目名字my Project]
5,cd到項目目錄下,npm install安裝依賴包
6,npm run dev 啟動項目,在http://localhost:8080
配置安裝依賴包
npm install xxx --save 這是普通依賴包
npm install xxx --save-dev 這是開發依賴包
npm i axios -S
npm i mint-ui -S
主入口文件App.vue,組件在components文件夾中。
由于 Vue 不允許動態添加根級響應式屬性,所以你必須在初始化實例前聲明根級響應式屬性,哪怕只是一個空值:
避免相對路徑,在webpack.base.conf.js里面設置其路徑的別名
例如
項目的目錄
過渡的CSS類名
對于這些在 enter/leave 過渡中切換的類名,v- 是這些類名的前綴。使用 <transition name="my-transition"> 可以重置前綴,比如 v-enter 替換為 my-transition-enter。
例如<transition name="my-transition"><transition>
<transition><transition>
同時生效的進入和離開的過渡不能滿足所有要求,所以 Vue 提供了 過渡模式
in-out: 新元素先進行過渡,完成之后當前元素過渡離開。
out-in: 當前元素先進行過渡,完成之后新元素過渡進入。
v-html和v-text區別
v-html渲染頁面時識別html標簽 并進行渲染
你的站點上動態渲染的任意 HTML 可能會非常危險,因為它很容易導致 XSS 攻擊。請只對可信內容使用 HTML 插值,絕不要對用戶提供的內容使用插值。v-text不識別html標簽,單純渲染成字符串。
指令系統
- v-bind ? ?? 綁定兩個元素的值保持一致,響應地更新 HTML 屬性 簡寫“:”
- v-on ???它用于監聽 DOM 事件 簡寫“@”
- v-if ??? 后面的參數是一個變量 Boolean類型,用于控制元素是否隱藏
- v-for ??? 列表循環
- v-model ???數據雙向綁定
指令縮寫
v-bind
<!-- 完整語法 -->
<a v-bind:href="url"></a>
<!-- 縮寫 -->
<a :href="url"></a>
v-on
<!-- 完整語法 -->
<a v-on:click="doSomething"></a>
<!-- 縮寫 -->
<a @click="doSomething"></a>
過濾器
<!-- 在兩個大括號中 -->
{{ message | capitalize }}
<!-- 在 v-bind 指令中 -->
<div v-bind:id="rawId | formatId"></div>
第一個參數指要被過濾的數據,通常在data屬性中
第二個參數指過濾的方法,通常定義在filters屬性中
<!-- 過濾器可以串聯 -->
{{ message | filterA | filterB }}
<!-- 過濾器是 JavaScript 函數,因此可以接受參數 -->
{{ message | filterA('arg1', arg2) }}
條件語句
v-if指令將根據表達式值(true 或 false )來決定是否插入元素;
可以用 v-else 指令給 v-if 添加一個 "else" 塊;
v-else-if 在 2.1.0 新增,顧名思義,用作 v-if 的 else-if 塊。可以鏈式的多次使用;
v-else 、v-else-if 必須跟在 v-if 或者 v-else-if之后
循環語句
v-for 指令需要以 site in sites 形式的特殊語法, sites 是源數據數組并且 site 是數組元素迭代的別名。v-for 可以綁定數據到數組來渲染一個列表。
v-for="site in sites"
v-for 可以通過一個對象的屬性來迭代數據
v-for="value in object"
你也可以提供第二個的參數為鍵名
v-for="(value, key) in object"
第三個參數為索引
v-for="(value, key, index) in object"
v-for 也可以循環整數
v-for="n in 10"
計算屬性
computed
我們可以使用 methods 來替代 computed,效果上兩個都是一樣的,但是 computed 是基于它的依賴緩存,只有相關依賴發生改變時才會重新取值。而使用 methods ,在重新渲染的時候,函數總會重新調用執行。
事件處理器
事件監聽可以使用 v-on 指令
v-on 可以接收一個定義的方法來調用
事件修飾符
<!-- 阻止單擊事件冒泡 -->
<a v-on:click.stop="doThis"></a>
<!-- 提交事件不再重載頁面 -->
<form v-on:submit.prevent="onSubmit"></form>
<!-- 修飾符可以串聯 -->
<a v-on:click.stop.prevent="doThat"></a>
<!-- 只有修飾符 -->
<form v-on:submit.prevent></form>
<!-- 添加事件偵聽器時使用事件捕獲模式 -->
<div v-on:click.capture="doThis">...</div>
<!-- 只當事件在該元素本身(而不是子元素)觸發時觸發回調 -->
<div v-on:click.self="doThat">...</div>
<!-- click 事件至少觸發一次,2.1.4版本新增 -->
<a v-on:click.once="doThis"></a>
按鍵修飾符
<!-- 只有在 keyCode 是 13 時調用 vm.submit() -->
<input v-on:keyup.13="submit">
<!-- 同上 -->
<input v-on:keyup.enter="submit">
<!-- 縮寫語法 -->
<input @keyup.enter="submit">
全部的按鍵別名:
.enter
.tab
.delete (捕獲 "刪除" 和 "退格" 鍵)
.esc
.space
.up
.down
.left
.right
.ctrl
.alt
.shift
.meta
組件
注冊一個全局組件語法格式如下
Vue.component(tagName, options)
tagName 為組件名,options 為配置選項。注冊后,我們可以使用以下方式來調用組件
<tagName></tagName>
Vue.component('todo-item', {
// todo-item 組件現在接受一個
// "prop",類似于一個自定義特性。
// 這個 prop 名為 todo。
props: ['todo'],
template: '<li>{{ todo.text }}</li>'
})
父組件動通過prop 向子組件傳值
子單元通過 prop 接口與父單元進行了良好的解耦。
自定義指令
1、全局指令
<div id="app">
<p>頁面載入時,input 元素自動獲取焦點:</p>
<input v-focus>
</div>
<script>
// 注冊一個全局自定義指令 v-focus
Vue.directive('focus', {
// 當綁定元素插入到 DOM 中。
inserted: function (el) {
// 聚焦元素
el.focus()
}
})
// 創建根實例
new Vue({
el: '#app'
})
</script>
2、局部指令,只能在這個實例中使用
vue-router
vue路由配置:
1.安裝
npm install vue-router --save / cnpm install vue-router --save
2、全局引入并 Vue.use(VueRouter) 在(main.js)文件中完成
import VueRouter from 'vue-router'
Vue.use(VueRouter)
3、配置路由
3.1、創建組件 引入組件
3.2、定義路由 (建議復制s)
const routes = [
{ path: '/foo', component: Foo },
{ path: '/bar', component: Bar },
{ path: '*', redirect: '/home' } /*默認跳轉路由*/
]
3.3、實例化VueRouter
const router = new VueRouter({
routes // (縮寫)相當于 routes: routes
})
3.4、掛載
new Vue({
el: '#app',
router,
render: h => h(App)
})
3.5 、根組件的模板里面放上這句話 <router-view></router-view>
3.6、路由跳轉
<router-link to="/foo">Go to Foo</router-link>
<router-link to="/bar">Go to Bar</router-link>
編程式導航 即用JavaScript實現路由跳轉
定義點擊事件 例如
fun(){
this,$router.push({path:" XXXX"})
}
生命周期鉤子---轉載
<!DOCTYPE html>
<html>
<head>
<title></title>
<script type="text/javascript" src="https://cdn.jsdelivr.net/vue/2.1.3/vue.js"></script>
</head>
<body>
<div id="app">
<p>{{ message }}</p>
</div>
<script type="text/javascript">
var app = new Vue({
el: '#app',
data: {
message : "xuxiao is boy"
},
beforeCreate: function () {
console.group('beforeCreate 創建前狀態===============》');
console.log("%c%s", "color:red" , "el : " + this.$el); //undefined
console.log("%c%s", "color:red","data : " + this.$data); //undefined
console.log("%c%s", "color:red","message: " + this.message)
},
created: function () {
console.group('created 創建完畢狀態===============》');
console.log("%c%s", "color:red","el : " + this.$el); //undefined
console.log("%c%s", "color:red","data : " + this.$data); //已被初始化
console.log("%c%s", "color:red","message: " + this.message); //已被初始化
},
beforeMount: function () {
console.group('beforeMount 掛載前狀態===============》');
console.log("%c%s", "color:red","el : " + (this.$el)); //已被初始化
console.log(this.$el);
console.log("%c%s", "color:red","data : " + this.$data); //已被初始化
console.log("%c%s", "color:red","message: " + this.message); //已被初始化
},
mounted: function () {
console.group('mounted 掛載結束狀態===============》');
console.log("%c%s", "color:red","el : " + this.$el); //已被初始化
console.log(this.$el);
console.log("%c%s", "color:red","data : " + this.$data); //已被初始化
console.log("%c%s", "color:red","message: " + this.message); //已被初始化
},
beforeUpdate: function () {
console.group('beforeUpdate 更新前狀態===============》');
console.log("%c%s", "color:red","el : " + this.$el);
console.log(this.$el);
console.log("%c%s", "color:red","data : " + this.$data);
console.log("%c%s", "color:red","message: " + this.message);
},
updated: function () {
console.group('updated 更新完成狀態===============》');
console.log("%c%s", "color:red","el : " + this.$el);
console.log(this.$el);
console.log("%c%s", "color:red","data : " + this.$data);
console.log("%c%s", "color:red","message: " + this.message);
},
beforeDestroy: function () {
console.group('beforeDestroy 銷毀前狀態===============》');
console.log("%c%s", "color:red","el : " + this.$el);
console.log(this.$el);
console.log("%c%s", "color:red","data : " + this.$data);
console.log("%c%s", "color:red","message: " + this.message);
},
destroyed: function () {
console.group('destroyed 銷毀完成狀態===============》');
console.log("%c%s", "color:red","el : " + this.$el);
console.log(this.$el);
console.log("%c%s", "color:red","data : " + this.$data);
console.log("%c%s", "color:red","message: " + this.message)
}
})
</script>
</body>
</html>
栗子
beforecreate : 舉個栗子:可以在這加個loading事件
created :在這結束loading,還做一些初始化,實現函數自執行
mounted : 在這發起后端請求,拿回數據,配合路由鉤子做一些事情
beforeDestroy: 你確認刪除XX嗎?
destroyed :當前組件已被刪除,清空相關內容