一、父組件可使用 props 把數據傳給子組件。
二、子組件可使用 $emit 觸發父組件的自定義事件。
php
父傳子:css
1 父組件 data(){vue
return{
msg:"兒子兒子,我是你爸爸",
}
},複製代碼
2 父組件node
import Child from "./Child"ios
<Child :title="msg" />vuex
3 子組件 npm
<div>axios
{{ title }}api
</div>數組
4 子組件
props:['title'],
還可指定類型:
props:{
title:String,
title2:[String,Number],
num:{
type:Number,
default:5 【默認值】
},複製代碼
}
複製代碼
子傳父:
1 子組件
<button @click="sendMsg">按鈕</button>複製代碼
2 子組件
data(){
return{
info:"嗯嗯嗯"
}
},複製代碼
3 子組件
methods:{
sendMsg(){
this.$emit("info",this.info) 【參數1:key 參數2:數據】
},
}複製代碼
4 父組件
<div>
{{ info }}
<Child @info="handlerMsg" />
</div>複製代碼
5 父組件
data(){
return{
info:""
}
},複製代碼
6 父組件
methods:{
handlerMsg(data){
this.info = data;
}複製代碼
Vuex 是一個專爲 Vue.js 應用程序開發的狀態管理模式。
它採用集中式存儲管理應用的全部組件的狀態,並以相應的規則保證狀態以一種可預測的方式發生變化。複製代碼
什麼狀況下使用vuex
雖然 Vuex 能夠幫助咱們管理共享狀態,但也附帶了更多的概念和框架。這須要對短時間和長期效益進行權衡。
若是您不打算開發大型單頁應用,使用 Vuex 多是繁瑣冗餘的。
確實是如此——若是您的應用夠簡單,您最好不要使用 Vuex。
一個簡單的 global event bus 就足夠您所需了。
可是,若是您須要構建是一箇中大型單頁應用,
您極可能會考慮如何更好地在組件外部管理狀態,Vuex 將會成爲天然而然的選擇。複製代碼
Actions
Action 提交的是 mutation,而不是直接變動狀態。
Action 能夠包含任意異步操做。複製代碼
簡單操做:
1 cnpm install vuex --save
2 建立一個store倉庫:
在src下建一個store文件夾:
在store下建index.js:
import Vue from "vue"
import Vuex from 'vuex'
Vue.use(Vuex)複製代碼
export default new Vuex.Store({
});
複製代碼
3 main.js下:
import store from "./store"
new Vue({
store,
})
複製代碼
4 在倉庫中定義數據:
用state,定義了count:10
export default new Vuex.Store({
state: {
count: 10
},});複製代碼
5 在倉庫中定義方法:
用mutations分別定義了count 的++和--
export default new Vuex.Store({
state: {
count: 10
},
mutations: {
increment(state) {
state.count++;
},
decrease(state) {
state.count--;
}
},});複製代碼
6 在組件裏用到++ 的事件觸發處定義方法:
methods:{
add(){
// this.$store.commit("increment");
this.$store.dispatch("increment");
}複製代碼
7 在組件裏用到--的事件觸發處定義方法:
methods:{
min(){
// this.$store.commit("decrease");
this.$store.dispatch("decrease");
}
},複製代碼
8 若是要作條件判斷,例如購物車,在倉庫中:
export default new Vuex.Store({
state: {
count: 10
},
mutations: {
increment(state) {
state.count++;
},
decrease(state) {
state.count--;
}
},
getters: { getState(state) {
return state.count > 0 ? state.count : 0
}
}
});複製代碼
9 在須要共享conut這個數據的組建裏:
獲取到getState,放至標籤裏{{ getCount }}
computed:{
getCount(){
// return this.$store.state.count;
return this.$store.getters.getState;
}
},複製代碼
1 在css過渡和動畫中自動應用class
過渡類名:
v-enter:進入開始
v-enter-active:執行過程當中
v-enter-to:結束動畫
v-leave:離開開始
v-leave-active:離開過程
v-leave-to:離開結束複製代碼
例:一
<transition name="fade"><p v-show="show">哈哈</p></transition>
<style>
.fade-enter-active, .fade-leave-active {
transition: opacity .5s
}
.fade-enter, .fade-leave-to {
opacity: 0
}
</style>複製代碼
二:
<transition name="hello">
<p v-show="showAnim">嘿嘿</p>
</transition>
<style>
.hello-enter-active{
animation:bounce-in 1s ease;
}
.hello-leave-active{
animation:bounce-in 1s ease reverse;
}
@keyframes bounce-in {
0% {
transform: scale(0);
}
50% {
transform: scale(1.5);
}
100% {
transform: scale(1);
}
}
@keyframes bounce-out {
0% {
transform: scale(1);
}
50% {
transform: scale(1.5);
}
100% {
transform: scale(0);
}
}
</style>複製代碼
2能夠配合css動畫庫
<transition name="world" enter-active-class="animated flip"
leave-active-class="animated flip">
<p v-show="libs">呵呵</p>
</transition>複製代碼
Axios 是一個基於 promise 的 HTTP 庫,能夠用在瀏覽器和 node.js 中。
1.cnpm install axios --save
2.main.js裏:
import Axios from "axios"
Vue.prototype.$axios = Axios複製代碼
3.請求
get請求:
this.$axios("http://www.wwtliu.com/sxtstu/news/juhenews.php",{
params:{
type:"junshi",
count:30
}
})
.then(res => {
this.newsData = res.data;
console.log(res.data);
})
.catch(error => {
console.log(error);
})
post請求:
form-data:?name=iwen&age=20
x-www-form-urlencoded:{name:"iwen",age:20}
注意:axios接受的post請求參數的格式是form-data格式
this.$axios.post("http://www.wwtliu.com/sxtstu/blueberrypai/login.php", qs.stringify({
user_id:"iwen@qq.com",
password:"iwen123",
verification_code:"crfvw"
}))
.then(res => {
console.log(res.data)
})
.catch(error => {
console.log(error);
})複製代碼
4.全局的axios配置
axios.defaults.baseURL = 'https://api.example.com';
axios.defaults.headers.common['Authorization'] = AUTH_TOKEN;
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';複製代碼
1. <style scoped></style>
scoped:樣式只在當前組件內生效。
2. 插槽:
單個插槽,具名插槽,做用域插槽(數據是子傳父)
3.自定義指令:
建立一個自定義指令:
例:自動聚焦
directives:{
focus:{
inserted: function (el) {
el.focus()
}
},複製代碼
<input v-focus type="text">複製代碼
4.過濾:
給數字前加符號:
{{ price | moneyChange }}複製代碼
filters:{
moneyChange(value){
if(typeof value === "number"){
return "¥"+value;
}
return value;
},複製代碼
data(){
return{
price:20,
}
},複製代碼
5.數據模擬
Mock:數據模擬
1.本身建立JSON文件。使用get請求形式訪問數據
優勢:方便,快捷
缺點:只能存在get請求
2.項目中集成服務器,模擬各類接口
優勢:模擬真實線上環境
缺點:增長開發成本
3.直接使用線上數據
優勢:真實
缺點:不必定每一個項目都存在
4.數據模擬庫
http://mockjs.com/
MockJS:
語法:
'list|1-10': [{
'id|+1': 1
}]
1.'name|1': array
從屬性值 array 中隨機選取 1 個元素,做爲最終值。
2.'name|+1': array
從屬性值 array 中順序選取 1 個元素,做爲最終值。
3.'name|min-max': array
經過重複屬性值 array 生成一個新數組,重複次數大於等於 min,小於等於 max。
4.'name|count': array
經過重複屬性值 array 生成一個新數組,重複次數爲 count。複製代碼