VUE框架知識點整理

一、父組件與子組件通信

1、組件中data屬性

組件對象也有一個data屬性,只是這個data屬性必須是一個函數,而且這個函數返回一個對象,對象內部保存着數據

elementUI vue知識圖譜展示_ios


原因:在於vue讓每個組件對象都返回一個新的對象,因為如果是同一個對象,組件在多次使用會相互影響,寫在函數中為局部變量,調用data中的值時,都會新創一個內存空間,調用者指向這個空間的值這樣組件間就不會相互影響

2、父向子傳遞數據
通過props向子組件傳遞數據

<!-- 父組件  -->
<cpn :cInfo='info'></cpn>

export default{
	data:{
		info: 10
	}
}
<!-- 子組件  -->
<div>{{cInfo}}</div>

export default{
	props:{
		cInfo: {
			type: Number,
			// type 為Object或數組時為函數 default(){ return [] }
			default: 0
		}
	}
}

3、子向父組件通信
通過事件向父組件發送消息,需要自定義事件來完成
在子組件中通過$emit()來觸發事件
在父組件中 通過v-on來監聽子組件事件

<!-- 子組件  -->
export default{
	methods: {
        click() {
          this.$emit('itemClick'[,item])
        }
      }
}
<!-- 父組件  -->
<cpn @itemClick="cpnClick"></cpn>

export default{
	methods: {
		cpnClick([item]) {
			...
		}
	}
}

4、父子組件的訪問方式
父組件訪問子組件:使用$refs

<!-- 子組件  -->
<div>{{currentIndex}}</div>

export default {
	data() {
        return {
          currentIndex: 0
        }
    }
}
<!-- 父組件  -->
<cpn ref="cpn"></cpn>

export default{
	//將父組件的 index 值傳遞給子組件的 currentInex
	click(index) {	    
        this.$refs.cpn.currentIndex = index        
      },
}

二、路由

1、URL的hash
錨點,本質上是改變window.location的href屬性,我們可以直接賦值location.href來改變hash,但頁面不刷新HTML5的 history模式
history.pushState(data, title, targetURL) -----棧結構
history.replaceState(data, title, targetURL) ------沒有回退
傳給目標路由的信息,可為空
目前所有瀏覽器都不支持,填空字符串即可
目標url,不會檢查url是否存在,且不能跨域。如不傳該項,即給當前url添加data
history.back()==history.go(-1) ------回退一步
history.forward()==history.go(1) -----進一步

2、VUE-router
2.1 vue中默認的是URL的hash,在router的實例中配置mode:‘history’

  • 標籤:跳轉<router-link to="跳轉屬性" tag="元素"> ,渲染<router-view>
  • 在函數中跳轉:this.$router.push(’/home’)

2.2 傳遞參數 params和query

  • params: 動態路由:$router.params.id == path: ‘/user/:id’ 可獲取路徑中的id值,傳遞後的路徑 ‘/user/123’
    函數中使用:this.$router.push(’/user’+this.userId)
  • query:配置路由時普通配置 ‘/user’, 傳遞方式:query對象中的key,value作為傳遞,路徑:/user?id=123
    函數中使用:this.$router.push( {path:’/user’,query: {key:value} })

2.3 $router和$route的區別

  • $router 為VueRouter實例,跳轉路由 $router.push(‘home’)
  • $route 為當前router對象,可以獲取name path query params (理解為路徑)

2.4 導航守衞
vue-router提供的導航守衞主要用來監聽路由的進入和離開的
vue-router 提供了beforEach 和 afterEach 兩個鈎子函數,它們會在路由的即將進入 和 離開之前觸發

to:即將進入的目標的路由對象
from:當前導航即將離開的路由對象
next: 調用該方法後,才能進入下一個鈎子
router.beforEach((to ,from, next) => {

})
router.afterEach((to, from) => {

})

2.5 keep-alive
vue中內置的一個組件,可以使被包含的組件保留狀態,或避免重新渲染

  • include – 字符串或正則表達式,只有匹配的組件會被緩存
  • exclude – 字符串或正則表達式,任何匹配的組件都不會被緩存(name屬性)
    router-view也是一個組件,如果直接被包在keep-alive 裏面,所有路徑匹配的視圖組件都會被緩存
<keep-alive>
	<router-view/>
</keep-alive>

activated()和deactivated() 是keep-alive的兩個函數

三、VUEX

vuex是專門為vue.js應用程序開發的狀態管理模式,它採用了集中式存儲管理 應用的所有組件的狀態,並以相應的規則狀態以一種可預測的方式發生變化

狀態管理: 多個組件共享的變量全部存儲在一個對象裏面,vuex就是為了提供這樣一個在多個組件間共享狀態的插件

概念圖

elementUI vue知識圖譜展示_elementUI vue知識圖譜展示_02

vuex核心概念

  • state : 單一狀態樹,能夠讓我們直接的方式找到某個狀態的階段,之後的維護和調試,方便管理和維護
  • mutation:狀態更新,vuex的state狀態更新的唯一方式,提交mutation
    參數被稱為是mutation的載荷(Payload)
    第一個參數固定 是state, 第二個參數代表commit的全部參數
mutations:{
        事件名: (state, index) => {
             state.index = index
        }             
    },
methods:{
	shijian() {
		this.$store.commit('事件名',index)
	}
}
  • action : 異步提交
actions:{
        事件名: (context) => {
             context.commit('事件')
        }             
    },
methods:{
	shijian() {
		this.$store.dispatch('事件名')
	}
}
  • getters: 與computed類似
getters:{
	id: state => {
		return ...
	}
}
  • module: 可以將store分割成模塊,每個模塊有自己的state,mutations,actions,getters

四、axios網絡請求

axios的功能特點

  • 在瀏覽器中發送XMLHttpRequests請求
  • 在node.js中發送http請求
  • 支持Promise異步編程
  • 攔截請求和響應
  • 轉換請求和響應數據

axios 請求方式 – axios(config)

axios({url: '',
	params: {
		id: 1,
		page:10
	}
}).then(res => {
	...
})

發送併發請求 – 使用axios.all可以放入多個請求的數組,axios.all([])返回的結果是一個數組,使用axios.spread可就數組分開

axios.all([axios.get('url'),
		axios.get('url',{params:{id:1,page:10}})
]).then(axios.spread(function (allresult1, allresult2) {
    debugger//打印可以拿到所有的返回值
    allresult1== 第一個請求的返回值
    allresult2== 第二個請求的返回值
  }));

全局配置

axios.default.baseURL = 'http:/localhost:8080'
axios.default.timeout = 5000 //超時時間(毫秒)

常見的配置選項:
get請求時 傳參為params
post請求時 傳參為data

axios的實例

const instance = axios.create({})

封裝

export function request(config){
	const instance = axios.create({
		baseURL = 'http:/localhost:8080',
		timeout = 5000
	})
	// 2.axios的攔截器
    // 2.1.請求攔截的作用
    instance.interceptors.request.use(config => {
      return config
    }, err => {
      // console.log(err);
    })

    // 2.2.響應攔截
    instance.interceptors.response.use(res => {
      return res.data
    }, err => {
      console.log(err);
    })

    // 3.發送真正的網絡請求
    return instance(config)
}

五、目錄

Vue.cli3的目錄結構

  • dist – 打包的包
  • public – 靜態目錄
  • src – 源代碼
  • browserslistrc – 瀏覽器相關情況
  • .gitignore – git忽略文件
  • .editorconfig – 約束
  • babel.config.js – ES語法轉換
  • vue.config.js – 自定義配置

六、生命週期

elementUI vue知識圖譜展示_elementUI vue知識圖譜展示_03


常用的幾個鈎子函數

  • created() : 請求數據
  • mounted():掛載數據
  • destroyed():組件銷燬(清理定時器等)

七、數組函數

數組函數 - - Vue是響應式的,數據變化時,Vue會自動檢測數組的變化,視圖對應的更新

  • push() - - - 數組後追加(可以追加多個),並返回新的長度
  • pop() - - - 最後一個刪除,並且返回刪除元素的值(數組為空時,不改變數組,並返回undefined)
  • shift() - - - 第一個元素刪除,返回數組的第一個元素
  • unshift() - - - 數組前添加(可以追加多個),返回新的長度
  • sort() - - - 排序
  • reverse() - - - 反轉
  • splice() - - -
    -刪除:傳遞一個參數(index) 刪除對應及之後的數據,傳遞第二個參數(你要刪除的個數)
    -替換:第二個參數,表示我們替換幾個元素,後面參數為用於替換的元素
    -插入:第二個參數傳入0,後面參數為插入的元素
  • split() - - - 將一個字符串以參數分割 ,返回數組
  • join() - - - 將數組轉化為一個字符串,一傳入的字符串參數分割,返回字符串
  • …Array - - - 數組裏的每一項拆分下來
  • fillter() - - - 參數為回調函數,必須返回一個boolean值,返回為true時,函數會自動將這次回調的n加到新數組中,false時,函數會過濾這次的n
  • map() - - - 返回的值時處理後的值
  • reduce - - - 對數組中所有的內容進行彙總,後一個參數為開始值
const nums = [10, 20, 111, 222, 4444, 40, 50]
let total = nums.fillter(n = > return n < 100)
.map(n => return n * 2)
.reduce((preValue, n) => {return preValue + n},0)

七、對象函數

const person = {
            name: "jack",
            age: 21,
            language: ['java', 'js', 'css']
        }

        console.log(Object.keys(person));//["name", "age", "language"]
        console.log(Object.values(person));//["jack", 21, Array(3)]
        console.log(Object.entries(person));//[Array(2), Array(2), Array(2)]

        const target = { a: 1 };
        const source1 = { b: 2 };
        const source2 = { c: 3 };

        //{a:1,b:2,c:3}
        Object.assign(target, source1, source2);

        console.log(target);//["name", "age", "language"]

        //3)、對象的函數屬性簡寫
        let person3 = {
            name: "jack",
            // 以前:
            eat: function (food) {
                console.log(this.name + "在吃" + food);
            },
            //箭頭函數this不能使用,對象.屬性
            eat2: food => console.log(person3.name + "在吃" + food),
            eat3(food) {
                console.log(this.name + "在吃" + food);
            }
        }

        person3.eat("香蕉");

        person3.eat2("蘋果")

        person3.eat3("橘子");

        //4)、對象拓展運算符

        // 1、拷貝對象(深拷貝)
        let p1 = { name: "Amy", age: 15 }
        let someone = { ...p1 }
        console.log(someone)  //{name: "Amy", age: 15}

        // 2、合併對象
        let age1 = { age: 15 }
        let name1 = { name: "Amy" }
        let p2 = {name:"zhangsan"}
        p2 = { ...age1, ...name1 } 
        console.log(p2)

以上僅為個人學習筆記總結,請大佬指點(^_^)。。。