Vue-cli的安裝
- 安裝2.x
npm i -D vue-cli
- 安裝3.x
npm i -D @vue/cli
利用cli創建項目:
- 2.x
vue init webpack appName
- 3.x
vue create appName
- 3.x 中一種方式:
vue ui
它將自動啟動瀏覽器8000端口,可以使用圖形化的方式進行項目的創建和管理。
事件處理中的this
greet: function (event) {
// `this` 在方法里指向當前 Vue 實例
alert('Hello ' + this.name + '!')
// `event` 是原生 DOM 事件
if (event) {
alert(event.target.tagName)
}
渲染錯位的問題
在Vue中對<li>、<tr> 和 <option>有著較嚴格的約束,其只能出現在指定的父元素中,如:
<table>
<book></book>
</table>
會導致渲染出錯,此時可以采用如下方式(關鍵是is="book")
<table>
<tr v-for="book of books" is="book" :book="book"></tr>
</table>
但注意:當子組件是來自于.vue文件的,是不存在上述問題的。
Vue的動畫,css設定技巧:
- 設置:“進入后”的動畫和“”離開時“的動畫(以fade為例)
.fade-enter-active, .fade-leave-active {
transition: opacity .5s;
}
說明:進入和離開的動畫效果為:透明度的變化在0.5秒完成
- 設置:”進入前“的狀態和”離開后“的狀態(注:該類在進入和離開后,將被刪除)
fade-enter, .fade-leave-to {
opacity: 0;
}
說明:進入動畫開始前和離開動畫結束后,透明度為0。(隱含:離開動畫開始前和進入動畫結束后,透明度保持元素現有狀態)
template的另一種優雅的使用方式:
<script type="text/x-template" id="temp1">
<div>
<!-- content -->
</div>
</script>
<script>
Vue.component("demo1",{
template:'#temp1'
});
</script>
渲染函數
可以使用render渲染函數取代template的定義,它更接近于編譯器底層,同時這將使得模板代碼的定義極具靈活性:
render: function (createElement) {
return createElement(
'h' + this.level, // 標簽名稱
this.$slots.default // 子元素數組
)
},
上面代碼,傳入一個createElement函數,它的返回結果是一個VNode。
createElement函數的使用:
其返回一個VNode元素,使用方式如下所示:
// @returns {VNode}
createElement(
// {String | Object | Function}
// 一個 HTML 標簽字符串,組件選項對象,或者
// 解析上述任何一種的一個 async 異步函數。必需參數。
'div',
// {Object}
// 一個包含模板相關屬性的數據對象
// 你可以在 template 中使用這些特性。可選參數。
{
// (詳情見下一節)
},
// {String | Array}
// 子虛擬節點 (VNodes),由 `createElement()` 構建而成,
// 也可以使用字符串來生成“文本虛擬節點”。可選參數。
[
'先寫一些文字',
createElement('h1', '一則頭條'),
createElement(MyComponent, {
props: {
someProp: 'foobar'
}
})
]
)
$slot的使用
在“組件標簽”的使用,會以上兩種形傳入slot
<my-comp>
<p slot="a">slot a</p>
this is default slot
</my-comp>
此時可以在template中可以使用如下方式獲取:
template:'<div>this is default :<slot></slot></div>'
在render中,可以:
render:function(createElement){
let default=this.$slots.default;
let a=this.$slots.a;
}
axios的基本使用:
const axios =require('axios');
axios({
method: 'post',
url: 'http://localhost:3000/users',
data: {uname:'ba'},
headers:{"Action":"do"}
}).then(function (resp) {
console.log(JSON.stringify(resp.data));
}).catch(function (err) {
console.log(err);
});
- 它可以在瀏覽器和node環境中使用
- 它會智能的根據data的特點,設置Content-Type和Accept頭
簡單演示Vue-Router的使用
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdn.bootcss.com/vue/2.6.10/vue.min.js"></script>
<script src="js/vue-router.js"></script>
</head>
<body>
<div id="app">
<router-link to="/">go home</router-link>
<router-link to="/about">go about</router-link>
<hr>
<router-view></router-view>
</div>
<script>
let home={template:'<h1>home</h1>'}
let about={template:'<h1>about</h1>'}
let router=new VueRouter({routes:
[{path:'/',name:'home',component:home},
{path:'/about',name:'about',component:about}
]})
new Vue({router:router,el:'#app'})
</script>
</body>
</html>