用 vue-loader 的 component 資料傳遞

  1. 用 vue-loader 的 component 資料傳遞
    1. 加入 component
    2. Data flow: Parent to Child
    3. Data flow: Child to Parent (like jQuery)
      1. 先回憶,在 jQuery 的用法
    4. Data flow: Child to Parent (Vue way)

用 vue-loader 的 component 資料傳遞

加入 component

先將 .vue 檔案 import 進來,並且宣告在 vue instance 的 component 裡面。

<script>
import componentName from 'path/component.vue';

export default {
//...
components: {
componentName,
},
//...
}
</script>

再以 import 進來後宣告的名字,當作自定義的 HTML tag name ,在想顯示 component 的地方放置。

<template>
<componentName></componentName>
</template>

Data flow: Parent to Child

靠 component 的 props

parent component

<template>
<componentName :child-data=parentData>
</componentName>
</template>

parentData 也可以放 parentComputed 的函數名稱

child component

在 component 要使用 props ,就當作一般的 data 這樣用。

ex:
JavaScript: this.childProp
HTML: { { childProp } }

<script>
export default {
//...
props: ["childProp"],
//...
}
</script>
<template>
<div>{{childProp}}</div>
</template>

Data flow: Child to Parent (like jQuery)

靠 component 的 $emit

parent component

<template>
<componentName @childEvent="parentMethod">
</componentName>
</template>
<script>
export default {
//...
method: {
parentMethod (e) {
this.parentData = e
}
}
//...
}
</script>

child component

在 component 要使用 $emit

先回憶,在 jQuery 的用法

$("element").on(eventName, eventCallback);

再看看,在 vue 這樣使用
將真實的事件定義成一個 $emit

<template>
<div @click="$emit(childEvent, childMethod())">
</div>
</template>
<script>
export default {
//...
method: {
childMethod () {
return 'e'; // partne method 的參數
}
}
//...
}
</script>

到此 $emit 的用法,和 jQuery 滿像的…
而事實上,卻不是這麼一回事。

Data flow: Child to Parent (Vue way)

parent component

$event 就是 callback function 的參數。在 parent 層可以直接引用。

<template>
<componentName @childEvent="parentData = $event">
</componentName>
</template>

child component

$emit 回傳的東西,其實是 eventCallback 的參數,如果要在 $emit 第二個參數使用 function 一定要 return 值。

<template>
<div @click="$emit(childEvent, 'e')">
<!-- e => partne method 的參數 -->
</div>
</template>