Ter*_*esa 14 vue.js vuejs3 vue-composition-api
通过选项 API,我们可以使用这些方式来扩展组件。假设我们有 2 个组件。
组件1.vue
<script>
export default {
methods: {
init(message) {
alert(message)
}
}
}
</script>
Run Code Online (Sandbox Code Playgroud)
Component2.vue
<script>
import Component1 from './Component1'
export default {
extends: Component1,
methods: {
showAlert() {
// we can access Component1 'init()' method here
this.init('Hello World!')
}
},
mounted() {
this.showAlert()
}
}
</script>
Run Code Online (Sandbox Code Playgroud)
现在,如何让它与组合 API 一起工作?我已经检查过该extends属性在文档中仍然可用,但没有明确的使用说明。
https://v3.vuejs.org/api/options-composition.html#extends
考虑以下带有组合 API 的代码。
组件1.vue
<script>
import { defineComponent, ref } from 'vue'
export default defineComponent({
setup () {
const init = (message) => {
alert(message)
}
return {
init
}
}
})
</script>
Run Code Online (Sandbox Code Playgroud)
Component2.vue
<script>
import { defineComponent, ref, onMounted } from 'vue'
import Component1 from './Component1.vue'
export default defineComponent({
extends: Component1,
setup () {
const showAlert = () => {
// How to access 'init()' method here?
}
onMounted(() => {
showAlert()
})
}
})
</script>
Run Code Online (Sandbox Code Playgroud)
谢谢你!
组合 api 通过可组合函数强制代码可重用性,该函数可以跨多个组件使用,因此创建一个名为useInit.js以下内容的文件:
const useInit=()=>{
const init = (message) => {
alert(message)
}
return {
init
}
}
export default useInit;
Run Code Online (Sandbox Code Playgroud)
然后将其导入每个组件中,例如:
组件1
<script>
import { defineComponent, ref } from 'vue'
import useInit from './useInit'
export default defineComponent({
setup () {
const {init} = useInit()
return {
init
}
}
})
</script>
Run Code Online (Sandbox Code Playgroud)
组件2
<script>
import { defineComponent, ref, onMounted } from 'vue'
import Component1 from './Component1.vue'
import useInit from './useInit'
export default defineComponent({
setup () {
const {init} = useInit()
const showAlert = () => {
init()
}
onMounted(() => {
showAlert()
})
}
})
</script>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25547 次 |
| 最近记录: |