組件定義與使用
1. vue 文件的組成(3 個部分)
1)模板頁面
<template>
頁面模板
</template>
2)JS 模塊對象
<script>
export default {
data() {return {}},
methods: {},
computed: {},
components: {}
}
</script>
3)樣式
<style>
樣式定義
</style>
2. 基本使用
1)引入組件
2)映射成標簽
3)使用組件標簽
<template>
<HelloWorld></HelloWorld>
<hello-world></hello-world>
</template>
<script>
import HelloWorld from './components/HelloWorld'
export default {
components: {
HelloWorld
}
}
</script>
3. 關于標簽名與標簽屬性名書寫問題
1)寫法一:一模一樣
2)寫法二:大寫變小寫, 并用-連接
組件間通信
1. 組件間通信基本原則
1)不要在子組件中直接修改父組件的狀態數據
2)數據在哪, 更新數據的行為(函數)就應該定義在哪
2. vue 組件間通信方式
1)props
2)vue 的自定義事件
3)消息訂閱與發布(如: pubsub 庫)
4)slot
5)vuex
組件間通信 1: props
1. 使用組件標簽時
<my-component name='tom' :age='3' :set-name='setName'></my-component>
2. 定義 MyComponent 時
1)在組件內聲明所有的 props
2)方式一: 只指定名稱
props: ['name', 'age', 'setName']
3)方式二: 指定名稱和類型
props: {
name: String, age: Number,
setNmae: Function
}
4)方式三: 指定名稱/類型/必要性/默認值
props: {
name: {type: String, required: true, default:xxx},
}
3. 注意
1)此方式用于父組件向子組件傳遞數據
2)所有標簽屬性都會成為組件對象的屬性, 模板頁面可以直接引用
3)問題:
a.如果需要向非子后代傳遞數據必須多層逐層傳遞
b.兄弟組件間也不能直接 props 通信, 必須借助父組件才可以
組件間通信 2: vue 自定義事件
1. 綁定事件監聽
// 方式一:通過 v-on 綁定
@delete_todo="deleteTodo"
// 方式二:通過 refs.xxx.$on('delete_todo', function (todo) {
this.deleteTodo(todo)
})
2. 觸發事件
// 觸發事件(只能在父組件中接收)
this.$emit(eventName, data)
3. 注意:
1)此方式只用于子組件向父組件發送消息(數據)
2)問題: 隔代組件或兄弟組件間通信此種方式不合適
組件間通信 3: 消息訂閱與發布(PubSubJS 庫)
1. 訂閱消息
PubSub.subscribe('msg', function(msg, data){})
2. 發布消息
PubSub.publish('msg', data)
3. 注意
優點: 此方式可實現任意關系組件間通信(數據)
4. 事件的 2 個重要操作(總結)
1)綁定事件監聽 (訂閱消息)
目標: 標簽元素 <button>
事件名(類型): click/focus
回調函數: function(event){}
2)觸發事件 (發布消息)
DOM 事件: 用戶在瀏覽器上對應的界面上做對應的操作
自定義: 編碼手動觸發
組件間通信 4: slot
1. 理解
此方式用于父組件向子組件傳遞標簽數據
2. 子組件: Child.vue
<template>
<div>
<slot name="xxx">不確定的標簽結構 1</slot>
<div>組件確定的標簽結構</div>
<slot name="yyy">不確定的標簽結構 2</slot>
</div>
</template>
3. 父組件: Parent.vue
<child>
<div slot="xxx">xxx 對應的標簽結構</div>
<div slot="yyy">yyyy 對應的標簽結構</div>
</child>
vue 項目中常用的 2 個 ajax 庫
1.vue-resource
vue 插件, 非官方庫, vue1.x 使用廣泛
2.axios
通用的 ajax 請求庫, 官方推薦, vue2.x 使用廣泛
vue-resource 的使用
1. 在線文檔
https://github.com/pagekit/vue-resource/blob/develop/docs/http.md
2. 下載
npm install vue-resource --save
3. 編碼
// 引入模塊
import VueResource from 'vue-resource'
// 使用插件
Vue.use(VueResource)
// 通過 vue/組件對象發送 ajax 請求
this.$http.get('/someUrl').then((response) => {
// success callback
console.log(response.data) //返回結果數據
}, (response) => {
// error callback
console.log(response.statusText) //錯誤信息
})
axios 的使用
1. 在線文檔
https://github.com/pagekit/vue-resource/blob/develop/docs/http.md
2. 下載:
npm install axios --save
3. 編碼
// 引入模塊
import axios from 'axios'
// 發送 ajax 請求
axios.get(url)
.then(response => {
console.log(response.data) // 得到返回結果數據
})
.catch(error => {
console.log(error.message)
})
4. 測試接口
接口 1: https://api.github.com/search/repositories?q=v&sort=stars