J'ai défini un itinéraire en vue:
<template>
<div>{{username}}</div>
</template>
<script lang="ts">
import { computed, defineComponent, ref, getCurrentInstance } from '@vue/composition-api';
export const useUsername = ({ user }) => {
return { username: user.name };
};
export default defineComponent({
setup(props, { root }) {
const vm = getCurrentInstance();
const userToLoad = computed(() => root.$route.params.userId);
const listOfUsers = [
{ userId: 1, name: 'user1' },
{ userId: 2, name: 'user2' },
];
const user = listOfUsers.find((u) => u.userId === +userToLoad.value);
if (!user) {
return root.$router.push('/404');
}
const { username } = useUsername({ user });
return { username };
},
});
</script>
Quel point à UserComponent:
<template>
<div>{{username}}</div>
</template>
et j'utilise computed partir de @vue/composition-api pour obtenir les données.
le problème est lorsque la route passe à un autre userId , en accédant à un autre utilisateur, l'utilisateur dans le modèle html n'a pas changé comme je m'y attendais. il ne redirige pas non plus lorsque l'utilisateur n'est pas dans la liste.
Alors, que puis-je faire pour résoudre ce problème?
voici mon code:
/users/:userId
3 Réponses :
Ajoutez s'il vous plaît ce code: watchEffect (() => userToLoad);
Vous pouvez transmettre les paramètres comme accessoires à vos composants. Les accessoires sont réactifs par défaut.
Voici à quoi pourrait ressembler la configuration de l'itinéraire:
<template>
<div>{{username}}</div>
</template>
<script lang="ts">
import { computed, defineComponent, ref, getCurrentInstance, watchEffect } from '@vue/composition-api';
export const useUsername = ({ user }) => {
return { username: user.name };
};
export default defineComponent({
props: {userId: {type: String, required: true },
setup(props, { root }) {
const vm = getCurrentInstance();
const user = ref()
const userToLoad = computed(() => props.userId);
const listOfUsers = [
{ userId: 1, name: 'user1' },
{ userId: 2, name: 'user2' },
];
watchEffect(() => user.value = listOfUsers.find((u) => u.userId === +userToLoad.value))
if (!user) {
return root.$router.push('/404');
}
const { username } = useUsername({ user });
return { username };
},
});
</script>
Vous pouvez ensuite utiliser les accessoires de votre composant avec watchEffect()
{
path: '/users/:userId',
name: Users,
component: YourComponent
},
watchEffect() s'exécutera immédiatement une fois défini et lorsque les dépendances réactives seront watchEffect()
Vous pouvez simplement faire ceci:
import { useRoute } from 'vue-router';
export default {
setup() {
const route = useRoute();
// Now you can access params like:
console.log(route.params.id);
}
};