組件定義與使用

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"

// 方式二:通過 [圖片上傳失敗...(image-c35d-1539168182646)]

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

接口 2: https://api.github.com/search/users?q=aa

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容