作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
刚开始接触vuejs,在使用的过程中遇到了一些问题。我创建了一个 Root View ,其中有 2 个子组件,rootview.vue 文件如下所示:
<template>
<div id="rootView">
<calendar-top-view></calendar-top-view>
<calendar-bottom-view></calendar-bottom-view>
</div>
</template>
<script>
import calendarTopView from './calendarTopView.vue'
import calendarBottomView from './calendarBottomView.vue'
export default {
components: {
'calendar-top-view': calendarTopView,
'calendar-bottom-view': calendarBottomView
}
}
</script>
在 calendar-bottom-view 组件中,我需要使用 vue-router 来帮助在子组件之间切换:calendarView 和 agendaView。所以我决定在我的 calendar-bottom-vue 组件中添加 vue-router,代码如下所示:
<template>
<div id='mainRightDiv'>
<div id='calendarToolboxDiv'>
<a v-link='{ path: "/calenarView"}'></a>
<a v-link='{ path: "/agendaView"}'></a>
</div>
<router-view></router-view>
</div>
</template>
<script type="text/javascript">
import Vue from 'vue'
import calendarView from './calendarView.vue'
import agendaView from './agendaView.vue'
import VueRouter from 'vue-router'
Vue.use(VueRouter)
let App = Vue.extend({})
let router = new VueRouter()
router.map({
'/calendarView': {
component: calendarView
},
'/agendaView': {
component: agendaView
}
})
export default {
ready: function () {
router.go({ path: '/calendarView'})
}
}
</script>
我打算做的是让路由在组件初始化的时候先渲染calendarView。但是当我运行这个页面时,我收到类似
的错误消息'router-view> 只能在支持路由器的应用程序中使用。'
我查看了vue-router的官方规范,在它的demo代码中发现,vue-router被用在了demo app的entry js中,没有发现在任何子组件中使用。
所以我想知道,如何在我的子组件之一中使用 vue-router,而不是 root?
最佳答案
假设您将 Browserify 与 Vueify 结合使用,您将创建 .js
文件,该文件应具有以下结构:
var Vue = require('vue');
var Router = require('vue-router');
Vue.use(Router);
Vue.config.debug = true;
//any other npm packages
import Alert from './components/Alert.vue';
import SubVue1 from './pages/Subvue1.vue';
import SubVue2 from './pages/Subvue2.vue';
import Bar from './pages/Bar.vue';
import Baz from './pages/Baz.vue';
var App = Vue.extend({
data: function () {
return {
//any ViewModel data
}
},
components: {Alert}
});
var router = new Router();
router.map({
// Not found handler
'*': {
component: {
template: '<div class="text-align:center">' +
'<h1>Not Found</h1>' +
'</div>'
}
},
'/sub1': {
name: 'subvue1',
component: SubVue1
},
'/sub2': {
name: 'subvue2',
component: SubVue2
// add a subRoutes map under /foo
subRoutes: {
'/bar': {
// Bar will be rendered inside Foo's <router-view>
// when /foo/bar is matched
component: Bar
},
'/baz': {
// Same for Baz, but only when /foo/baz is matched
component: Baz
}
}
}
});
router.start(App, 'body'); // #app,.start -as you wish
请注意,我在根父 .js
文件中使用 vue-router。所以基本上当您输入 /sub1 时,Subvue1.vue 就会被加载。注意subroutes(calendarView和agendaView切换)。每个 SubVue、Bar、Baz 都应该有结构:
<template>
<router-view><router-view> //For Subvue2 subroute
</template>
<script>
export default {
props: ['parentProperty'],
data: function () {// data}
methods:{}
}
<style></style>
阅读Vue Router文档以获取更多信息。
关于vue.js - 如何仅在子组件中使用 vue-router?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38236841/
我是一名优秀的程序员,十分优秀!