Vue3 v-if 无法加载惰性组件
Vue3 v-if cannot load lazy component
代码非常简单。关于组件无法呈现。
<template>
<div id="nav">
<button @click="sh = !sh">{{ sh }}</button>
<p v-if="sh">v-if</p>
<about v-if="sh" />
</div>
</template>
<script lang="ts">
import { defineComponent, ref } from "vue";
export default defineComponent({
components: {
about: () => import("@/views/About.vue")
},
setup() {
const sh = ref(false);
return {
sh
};
}
// data: () => ({
// sh: false
// })
});
</script>
我在vue2项目(JS+vue2.6.11)中试过了,效果一如既往的好。
是bug还是我操作有误?谢谢。
是的。但是,惰性组件应该这样声明。
about: () => defineAsyncComponent(() => import("@/views/About.vue")) // wrong
<template>
<div id="nav">
<button @click="sh = !sh">{{ sh }}</button>
<p v-if="sh">v-if</p>
<about v-if="sh" />
</div>
</template>
<script lang="ts">
import { defineAsyncComponent, defineComponent } from "vue";
// lazy component can be declared here too
//const about = defineAsyncComponent(() => import("@/views/About.vue"));
export default defineComponent({
components: {
about: defineAsyncComponent(() => import("@/views/About.vue"))
},
data: () => ({ sh: false })
});
</script>
https://vuejsdevelopers.com/2020/07/13/vue-async-components-suspense/
<template>
<div>
<h1>O_o</h1>
<component :is="name"/>
<button @click="onClick">Click me !</button>
</div>
</template>
<script>
import { defineAsyncComponent, defineComponent, ref, reactive, computed } from "vue"
export default defineComponent({
name: 'HelloWorld',
components: {
about: defineAsyncComponent(() => import("../views/About.vue")),
},
data: () => ({
boardFields: [],
sh: false
}),
setup () {
const isShow = ref(false);
const name = computed (() => isShow.value ? defineAsyncComponent(() => import("../views/AddPicture.vue")) : '')
const onClick = () => {
isShow.value = !isShow.value;
}
return {
onClick,
name,
isShow
}
}
})
</script>
代码非常简单。关于组件无法呈现。
<template>
<div id="nav">
<button @click="sh = !sh">{{ sh }}</button>
<p v-if="sh">v-if</p>
<about v-if="sh" />
</div>
</template>
<script lang="ts">
import { defineComponent, ref } from "vue";
export default defineComponent({
components: {
about: () => import("@/views/About.vue")
},
setup() {
const sh = ref(false);
return {
sh
};
}
// data: () => ({
// sh: false
// })
});
</script>
我在vue2项目(JS+vue2.6.11)中试过了,效果一如既往的好。
是bug还是我操作有误?谢谢。
是的。但是,惰性组件应该这样声明。
about: () => defineAsyncComponent(() => import("@/views/About.vue")) // wrong
<template>
<div id="nav">
<button @click="sh = !sh">{{ sh }}</button>
<p v-if="sh">v-if</p>
<about v-if="sh" />
</div>
</template>
<script lang="ts">
import { defineAsyncComponent, defineComponent } from "vue";
// lazy component can be declared here too
//const about = defineAsyncComponent(() => import("@/views/About.vue"));
export default defineComponent({
components: {
about: defineAsyncComponent(() => import("@/views/About.vue"))
},
data: () => ({ sh: false })
});
</script>
https://vuejsdevelopers.com/2020/07/13/vue-async-components-suspense/
<template>
<div>
<h1>O_o</h1>
<component :is="name"/>
<button @click="onClick">Click me !</button>
</div>
</template>
<script>
import { defineAsyncComponent, defineComponent, ref, reactive, computed } from "vue"
export default defineComponent({
name: 'HelloWorld',
components: {
about: defineAsyncComponent(() => import("../views/About.vue")),
},
data: () => ({
boardFields: [],
sh: false
}),
setup () {
const isShow = ref(false);
const name = computed (() => isShow.value ? defineAsyncComponent(() => import("../views/AddPicture.vue")) : '')
const onClick = () => {
isShow.value = !isShow.value;
}
return {
onClick,
name,
isShow
}
}
})
</script>