#vuejs3
Вопрос:
Я создал свой первый проект и запустил процесс сборки. У меня есть моя index.html файл, и он работает, если его открыть напрямую.
Я скопировал код на существующую html-страницу, и начальная загрузка страницы в порядке. Однако, когда реквизиты обновляются, привязка (операторы v-if) больше не работает.
Любая помощь была бы очень кстати
Редактирование с помощью примера кода
<script>
import { ref } from "vue";
import Determining from './Determining.vue'
import Ready from './Ready.vue'
export default {
components: {
'Determining': Determining,
'Ready': Ready,
},
setup() {
let checkout = ref({
state: 'determining',
});
return {
checkout,
};
},
created() {
this.checkout.state = 'ready';
console.log("I am getting here");
}
}
</script>
<template>
<Determining v-if="checkout.state == 'determining'" />
<Ready v-if="checkout.state == 'ready'" />
</template>
Определяющее состояние отображается при первой загрузке страницы. Журнал консоли запускается при настройке, но готовый компонент не отображается
Прогресс
Я сузил его до других javascript, запущенных на странице. Любой javascript, даже просто
<script>console.log("hello");</script>
Этого достаточно, чтобы сломать его. Помимо добавления дополнительного javascript в Vue, есть ли что-то еще вокруг этого?
Комментарии:
1. Вы не должны использовать
created()
в сочетании сsetup()
: v3.vuejs.org/guide/composition-api-lifecycle-hooks.html Однако удивительно, что оператор журнала запускается. Вместо этого ты мог бы использоватьonBeforeMount
крючок. Но в любом случае, если бы это сработало, вы бы никогда не увидели определяющее состояние, так как оно изменило бы ссылку до фактического рендеринга, который выполняется при монтировании.
Ответ №1:
если я не ошибаюсь, вы не можете получить доступ к api композиции или setup()
переменным в api опций (например created
, mounted
, data
, methods
и т. Д.). Вы можете использовать beforeMount
, как прокомментировал @Thomas, или onMounted
импортировав его из vue
, например:
<script>
import { ref, beforeCreate } from "vue";
import Determining from './Determining.vue'
import Ready from './Ready.vue'
export default {
components: {
'Determining': Determining,
'Ready': Ready,
},
setup() {
beforeCreate(()=> {
checkout.state.value = 'ready';
console.log("I am getting here");
})
let checkout = ref({
state: 'determining',
});
return {
checkout,
};
}
}
</script>
<template>
<Determining v-if="checkout.state == 'determining'" />
<Ready v-if="checkout.state == 'ready'" />
</template>
если вы хотите, чтобы это было проще, вы можете использовать настройку сахара сценария, таким образом, вам не нужно возвращаться stup()
. Это может упростить ваш код, но если вы хотите определить реквизиты, подход другой
<script setup>
import { ref, beforeCreate } from "vue";
import Determining from './Determining.vue'
import Ready from './Ready.vue'
beforeCreate(()=> {
checkout.state.value = 'ready';
console.log("I am getting here");
})
let checkout = ref({
state: 'determining',
});
</script>
<template>
<Determining v-if="checkout.state == 'determining'" />
<Ready v-if="checkout.state == 'ready'" />
</template>