組件間通信與ajax的請求方式

組件定義與使用

1. vue 文件的組成(3 個部分)

1)模板頁面

<template>
頁面模板
</template>
2)JS 模塊對象

<script>
    export default {
        data() {return {}},
        methods: {},
        computed: {},
        components: {}
    }
</script>

3)樣式

<style>
樣式定義
</style>

2. 基本使用

1)引入組件

2)映射成標(biāo)簽

3)使用組件標(biāo)簽

<template>
    <HelloWorld></HelloWorld>
    <hello-world></hello-world>
</template>

<script>
    import HelloWorld from './components/HelloWorld' 
    export default {
        components: { 
            HelloWorld
        }
    }
</script>
3. 關(guān)于標(biāo)簽名與標(biāo)簽屬性名書寫問題

1)寫法一:一模一樣

2)寫法二:大寫變小寫, 并用-連接

組件間通信

1. 組件間通信基本原則

1)不要在子組件中直接修改父組件的狀態(tài)數(shù)據(jù)

2)數(shù)據(jù)在哪, 更新數(shù)據(jù)的行為(函數(shù))就應(yīng)該定義在哪

2. vue 組件間通信方式

1)props

2)vue 的自定義事件

3)消息訂閱與發(fā)布(如: pubsub 庫)

4)slot

5)vuex

組件間通信 1: props

1. 使用組件標(biāo)簽時

<my-component name='tom' :age='3' :set-name='setName'></my-component>

2. 定義 MyComponent 時

1)在組件內(nèi)聲明所有的 props

2)方式一: 只指定名稱

props: ['name', 'age', 'setName']
3)方式二: 指定名稱和類型

props: {
name: String, age: Number,
setNmae: Function
}
4)方式三: 指定名稱/類型/必要性/默認(rèn)值

props: {
name: {type: String, required: true, default:xxx},
}

3. 注意

1)此方式用于父組件向子組件傳遞數(shù)據(jù)

2)所有標(biāo)簽屬性都會成為組件對象的屬性, 模板頁面可以直接引用

3)問題:

a.如果需要向非子后代傳遞數(shù)據(jù)必須多層逐層傳遞

b.兄弟組件間也不能直接 props 通信, 必須借助父組件才可以

組件間通信 2: vue 自定義事件

1. 綁定事件監(jiān)聽

// 方式一:通過 v-on 綁定
@delete_todo="deleteTodo"

// 方式二:通過 on() this.refs.xxx.$on('delete_todo', function (todo) {
this.deleteTodo(todo)
})

2. 觸發(fā)事件

// 觸發(fā)事件(只能在父組件中接收)
this.$emit(eventName, data)

3. 注意:

1)此方式只用于子組件向父組件發(fā)送消息(數(shù)據(jù))

2)問題: 隔代組件或兄弟組件間通信此種方式不合適

組件間通信 3: 消息訂閱與發(fā)布(PubSubJS 庫)

1. 訂閱消息

PubSub.subscribe('msg', function(msg, data){})

2. 發(fā)布消息

PubSub.publish('msg', data)

3. 注意

優(yōu)點: 此方式可實現(xiàn)任意關(guān)系組件間通信(數(shù)據(jù))

4. 事件的 2 個重要操作(總結(jié))

1)綁定事件監(jiān)聽 (訂閱消息)

目標(biāo): 標(biāo)簽元素 <button>

事件名(類型): click/focus

回調(diào)函數(shù): function(event){}

2)觸發(fā)事件 (發(fā)布消息)

DOM 事件: 用戶在瀏覽器上對應(yīng)的界面上做對應(yīng)的操作

自定義: 編碼手動觸發(fā)

組件間通信 4: slot

1. 理解

此方式用于父組件向子組件傳遞標(biāo)簽數(shù)據(jù)

2. 子組件: Child.vue

<template>
<div>
<slot name="xxx">不確定的標(biāo)簽結(jié)構(gòu) 1</slot>
<div>組件確定的標(biāo)簽結(jié)構(gòu)</div>
<slot name="yyy">不確定的標(biāo)簽結(jié)構(gòu) 2</slot>
</div>
</template>

3. 父組件: Parent.vue

<child>
<div slot="xxx">xxx 對應(yīng)的標(biāo)簽結(jié)構(gòu)</div>
<div slot="yyy">yyyy 對應(yīng)的標(biāo)簽結(jié)構(gòu)</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/組件對象發(fā)送 ajax 請求
this.$http.get('/someUrl').then((response) => {
    // success callback 
    console.log(response.data) //返回結(jié)果數(shù)據(jù)
}, (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'

// 發(fā)送 ajax 請求
axios.get(url)
    .then(response => {
        console.log(response.data) // 得到返回結(jié)果數(shù)據(jù)
    })
    .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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末菲嘴,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖财忽,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件胜榔,死亡現(xiàn)場離奇詭異鼠冕,居然都是意外死亡灾前,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進(jìn)店門珠月,熙熙樓的掌柜王于貴愁眉苦臉地迎上來扩淀,“玉大人,你說我怎么就攤上這事啤挎∽ぷ唬” “怎么了?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵庆聘,是天一觀的道長胜臊。 經(jīng)常有香客問我,道長掏觉,這世上最難降的妖魔是什么区端? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任值漫,我火速辦了婚禮澳腹,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘杨何。我一直安慰自己酱塔,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布危虱。 她就那樣靜靜地躺著羊娃,像睡著了一般。 火紅的嫁衣襯著肌膚如雪埃跷。 梳的紋絲不亂的頭發(fā)上蕊玷,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天,我揣著相機(jī)與錄音弥雹,去河邊找鬼垃帅。 笑死,一個胖子當(dāng)著我的面吹牛剪勿,可吹牛的內(nèi)容都是我干的贸诚。 我是一名探鬼主播,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼酱固!你這毒婦竟也來了械念?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤运悲,失蹤者是張志新(化名)和其女友劉穎龄减,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體班眯,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡欺殿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了鳖敷。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片脖苏。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖定踱,靈堂內(nèi)的尸體忽然破棺而出棍潘,到底是詐尸還是另有隱情,我是刑警寧澤崖媚,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布亦歉,位于F島的核電站,受9級特大地震影響畅哑,放射性物質(zhì)發(fā)生泄漏肴楷。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一荠呐、第九天 我趴在偏房一處隱蔽的房頂上張望赛蔫。 院中可真熱鬧,春花似錦泥张、人聲如沸呵恢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽渗钉。三九已至,卻和暖如春钞钙,著一層夾襖步出監(jiān)牢的瞬間鳄橘,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工芒炼, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留瘫怜,地道東北人。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓焕议,卻偏偏與公主長得像宝磨,于是被迫代替她去往敵國和親弧关。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內(nèi)容