更改 Rad SideDrawer 的内容(原为 'Second (third,...) Side Drawer'
Change Content of Rad SideDrawer (was 'Second (third,...) Side Drawer'
应该很简单,不过我在这里问一下,也许其他人可以用。
如何添加第二个侧边抽屉?
我已经将DrawerContent.vue
复制到DrawerContentL2.vue
,并修改了内容。
并添加
import DrawerContentL2 from "./components/DrawerContentL2";
给我的 app.js
原来的app.js长得像
new Vue({
render (h) {
return h(
App,
[
h(DrawerContent, { slot: 'drawerContent' }),
h(Twisty, { slot: 'mainContent' })
]
)
}
}).$start();
现在怎么办?
对于 NativeScript UI RadSideDrawer,您必须将第二个放在根内容中。
或者,您也可以使用 Igor Randjelovic 的 nativescript-vue-multi-drawer,它是专门为多抽屉功能编写的。
我尝试了@Manoj 在这里建议的方法:
new Vue({
render (h) {
return h(
App,
[
h(v-if (store.state.currentLevel == "L1"){DrawerContent} v-else {DrawerContentL2}, { slot: 'drawerContent' }),
h(Home, { slot: 'mainContent' })
]
)
}
}).$start()
或者,
new Vue({
render (h) {
return h(
App,
[
h(if (store.state.currentLevel == "L1"){DrawerContent} else {DrawerContentL2}, { slot: 'drawerContent' }),
h(Home, { slot: 'mainContent' })
]
)
}
}).$开始()
两者都在条件上画了一个 unexpected token
错误。
并且,为了好玩,尝试将整个内容包装在条件中。
if(store.state.currentLevel == "L1"){
new Vue({
render (h) {
return h(
App,
[
h(DrawerContent, { slot: 'drawerContent' }),
h(Home, { slot: 'mainContent' })
]
)
}
}).$start() }
else {
new Vue({
render (h) {
return h(
App,
[
h(DrawerContentL2, { slot: 'drawerContent' }),
h(LevelTwo, { slot: 'mainContent' })
]
)
}
}).$start(); }
这会编译并运行,但仅在应用程序启动时运行。更改 currentLevel
不会更改 drawercontent
。
好的,知道了。
我没有尝试将 slot: 'drawerContent'
的内容从 DrawerContent.vue
更改为 DrawerContentL2.vue
,而是将它们放在两个不同的文件中,并使用主 DrawerContent.vue 来选择哪个。
感谢 Alligator.io 提供的提示。 Swappable Dynamic Components in Vue.js
新的 DrawerContent.vue 看起来像:
<template>
<component :is="dynamicComponent"></component>
</template>
<script>
import DrawerContentL1 from "./DrawerContentL1";
import DrawerContentL2 from "./DrawerContentL2";
export default {
components: {
DrawerContentL1,
DrawerContentL2
},
computed: {
dynamicComponent() {
if(this.$store.state.currentLevel=="L1") {
return 'DrawerContentL1';
} else {
return 'DrawerContentL2';
}
}
}
}
</script>
当然,每个组件文件都必须声明它的名称:
export default {
name: "DrawerContentL1",
mounted() {
...
应该很简单,不过我在这里问一下,也许其他人可以用。
如何添加第二个侧边抽屉?
我已经将DrawerContent.vue
复制到DrawerContentL2.vue
,并修改了内容。
并添加
import DrawerContentL2 from "./components/DrawerContentL2";
给我的 app.js
原来的app.js长得像
new Vue({
render (h) {
return h(
App,
[
h(DrawerContent, { slot: 'drawerContent' }),
h(Twisty, { slot: 'mainContent' })
]
)
}
}).$start();
现在怎么办?
对于 NativeScript UI RadSideDrawer,您必须将第二个放在根内容中。
或者,您也可以使用 Igor Randjelovic 的 nativescript-vue-multi-drawer,它是专门为多抽屉功能编写的。
我尝试了@Manoj 在这里建议的方法:
new Vue({
render (h) {
return h(
App,
[
h(v-if (store.state.currentLevel == "L1"){DrawerContent} v-else {DrawerContentL2}, { slot: 'drawerContent' }),
h(Home, { slot: 'mainContent' })
]
)
}
}).$start()
或者,
new Vue({
render (h) {
return h(
App,
[
h(if (store.state.currentLevel == "L1"){DrawerContent} else {DrawerContentL2}, { slot: 'drawerContent' }),
h(Home, { slot: 'mainContent' })
]
)
}
}).$开始()
两者都在条件上画了一个 unexpected token
错误。
并且,为了好玩,尝试将整个内容包装在条件中。
if(store.state.currentLevel == "L1"){
new Vue({
render (h) {
return h(
App,
[
h(DrawerContent, { slot: 'drawerContent' }),
h(Home, { slot: 'mainContent' })
]
)
}
}).$start() }
else {
new Vue({
render (h) {
return h(
App,
[
h(DrawerContentL2, { slot: 'drawerContent' }),
h(LevelTwo, { slot: 'mainContent' })
]
)
}
}).$start(); }
这会编译并运行,但仅在应用程序启动时运行。更改 currentLevel
不会更改 drawercontent
。
好的,知道了。
我没有尝试将 slot: 'drawerContent'
的内容从 DrawerContent.vue
更改为 DrawerContentL2.vue
,而是将它们放在两个不同的文件中,并使用主 DrawerContent.vue 来选择哪个。
感谢 Alligator.io 提供的提示。 Swappable Dynamic Components in Vue.js
新的 DrawerContent.vue 看起来像:
<template>
<component :is="dynamicComponent"></component>
</template>
<script>
import DrawerContentL1 from "./DrawerContentL1";
import DrawerContentL2 from "./DrawerContentL2";
export default {
components: {
DrawerContentL1,
DrawerContentL2
},
computed: {
dynamicComponent() {
if(this.$store.state.currentLevel=="L1") {
return 'DrawerContentL1';
} else {
return 'DrawerContentL2';
}
}
}
}
</script>
当然,每个组件文件都必须声明它的名称:
export default {
name: "DrawerContentL1",
mounted() {
...