У меня проблемы с пониманием того, как работает навигация с использованием NativeScript Vue. Я начал вчера и не могу заставить его работать. Он говорит, что мой AppDrawer
компонент рекурсивный.
Основной фрейм содержит страницу, которая содержит меню и панель действий. Если я нажимаю на что-то, он загружает новую страницу в главном фрейме и перезагружает меню и панель действий. Или люди просто используют рамку посередине для загрузки страниц без необходимости перерисовывать меню / ящик? При этом, как бы я изменил данные на панели действий или в ящике внутри фрейма? Я предполагаю использовать Vuex, но я не совсем уверен, каков оптимальный подход при разработке приложения android.
Извините, если я неправильно понял терминологию.
nav / AppDrawer. vue:
<template>
<StackLayout ~drawerContent backgroundColor="#444">
<Label class="drawer-header" text="Drawer" />
<Label class="drawer-item" text="Accueil" @tap="btnHome()" />
<Label class="drawer-item" text="Item 2" @tap="btnAdd2()" />
<Label class="drawer-item" text="Item 3" @tap="btnHistory()" />
</StackLayout>
</template>
<script>
// Load pages
import App from "../App";
import Add2 from "../Add2";
import History from "../History";
export default {
components: {},
methods: {
btnHome() {
this.$navigateTo(App);
},
btnAdd2() {
this.$navigateTo(Add2);
},
btnHistory() {
this.$navigateTo(History);
},
},
};
</script>
Приложение. vue:
<template>
<Page>
<ActionBar>
<GridLayout width="100%" columns="auto, *">
<Label
text="MENU"
@tap="$refs.drawer.nativeView.showDrawer()"
col="0"
/>
<Label class="title" text="Title" col="1" />
</GridLayout>
</ActionBar>
<RadSideDrawer ref="drawer">
<AppDrawer />
<GridLayout ~mainContent columns="*" rows="*">
<TextView editable="false">
<FormattedString>
<Span :text="msg" />
</FormattedString>
</TextView>
</GridLayout>
</RadSideDrawer>
</Page>
</template>
<script>
import AppDrawer from "./nav/AppDrawer.vue";
import { device } from "tns-core-modules/platform";
export default {
components: {
AppDrawer,
},
data() {
return {
msg:
"Vous n'êtes pas connecté. Les téléversements seront assigné avec l'ID: " +
device.uuid,
};
},
methods: {},
};
</script>
История. vue:
<template>
<Frame>
<Page>
<ActionBar>
<GridLayout width="100%" columns="auto, *">
<Label
text="MENU"
@tap="$refs.drawer.nativeView.showDrawer()"
col="0"
/>
<Label class="title" text="History" col="1" />
</GridLayout>
</ActionBar>
<RadSideDrawer ref="drawer">
<AppDrawer />
<GridLayout ~mainContent columns="*" rows="*">
<TextView editable="false">
<FormattedString>
<Span text="testing 1, 2" />
</FormattedString>
</TextView>
</GridLayout>
</RadSideDrawer>
</Page>
</Frame>
</template>
<script>
import AppDrawer from "./nav/AppDrawer.vue";
export default {
components: {
AppDrawer,
},
data() {
return {};
},
methods: {},
};
</script>
РЕДАКТИРОВАТЬ:
Хорошо, я понимаю, проблема в том, что я импортирую AppDrawer
в App
, поэтому на странице приложения есть меню. И затем я импортирую App
в AppDrawer
, потому что мне нужна кнопка «Домой» в меню, чтобы пользователь мог вернуться на главную страницу / экран.
Это создает все oop. Я до сих пор не понимаю, как люди импортируют меню на каждой странице и все еще импортируют каждую страницу в меню, так что пользователь может быть перенаправлен на эту страницу.
Основываясь на ответе ниже, я попытался:
<script>
export default {
components: {
App: () => import("../App.vue"),
AddProduct: () => import("../Add2.vue"),
History: () => import("../History.vue")
},
methods: {
btnHome() {
this.$navigateTo(App);
},
btnAdd2() {
this.$navigateTo(Add2);
},
btnHistory() {
this.$navigateTo(History);
}
}
};
</script>
Но я получаю JS: [Vue warn]: Error in v-on handler: "ReferenceError: Add2 is not defined"
.