script setupでbeforeRouteEnter - vue3, composition api
今のところAPIはサポートされていないので、以下のようにする必要がある。
これが自然な書き方だとも思う。
Usage of beforeRouteEnter with <script setup> · Discussion #302 · vuejs/rfcs · GitHub
pau-santesmasses said
code:js
<script>
import { useFetch } from '@vueuse/core'
export default {
beforeRouteEnter: function (to) {
const { data } = useFetch(/your/url/${to.params.your_route_params})
to.params.data = data
}
}
</script>
<script setup>
defineProps({
data: {
type: null, Object,
required: true
}
})
// ...
</script>
SFC <script setup> | Vue.js
code:js
<script>
// normal <script>, executed in module scope (only once)
runSideEffectOnce()
// declare additional options
export default {
inheritAttrs: false,
customOptions: {}
}
</script>
<script setup>
// executed in setup() scope (for each instance)
</script>
vue3のDocumentのサンプルコードの書き方が、一番上にscriptがあって、その下にtemplateがあった。svelteに似ている。
2022/5/28
Usage of beforeRouteEnter with <script setup> · Discussion #302 · vuejs/rfcs · GitHub
code:js
<script lang="ts">
import { defineComponent, ComponentPublicInstance } from 'vue'
interface IInstance extends ComponentPublicInstance {
setPathFrom(from: string): void
}
export default defineComponent({
beforeRouteEnter(to, from, next) {
next((vm) => {
const instance = vm as IInstance
instance.setPathFrom(from.path)
})
},
})
</script>
<script lang="ts" setup>
let pathFrom: string
const setPathFrom = (path: string) => {
pathFrom = path
console.log('vue-route::from::', pathFrom)
}
defineExpose({ setPathFrom })
</script>
defineComponentしちゃう方がしっくりくるかも...Jabelic.icon
#nuxt #vue #web #js