是否可以在 vue 2 中使用没有组件的 vue-router?
Is it possible to use vue-router without a component in vue 2?
我有一个非常简单的页面,只有几行代码,我想使用没有 vue-component 的 vue-router。
我想获取root后的string "my-search-query"
:
www.example.com/my-search-query
并在我的主要 Vue() 对象中使用它。这可能吗?
谢谢!
正如tom_h所说,如果您只想获取路径名,可以使用window.location.pathname
。如果您想在此路径名更改时收到通知,请先将其初始化为您的 data(){} 对象并将其观察为:
data () {
return {
path: window.location.pathname
}
},
watch: {
path (newpath, oldpath) {
alert('location path just changed from ' + newpath + ' to ' + oldpath )
}
}
可以在没有 vue-component
的情况下使用 vue-router
,并且仍然会收到有关主 Vue() 应用程序对象中路径更改的通知:
您可以像这样从 www.example.com/#/my-search-query
获取 "my-search-query"
字符串:
const router = new VueRouter({
routes: [
{ path: '/:question' }
]
})
const app = new Vue({
el: '#app',
router,
watch: {
'$route.params.question': function(newVal, oldVal) {
alert(newVal === 'my-search-query');
}
}
});
感谢@samayo 为我指明了正确的方向!
由于路由器是您的视图模型实例的一部分,您可以创建一个计算函数,该函数 returns 路由器的路径值。例如,您可以执行以下操作:
data: function() {
router: new VueRouter()
},
computed: function() {
routerPath: function() {
return this.router.currentRoute.path;
}
},
watch: function() {
routerPath: function(val) {
switch(val) {
case '/':
// @TODO: logic for home
break;
case '/path1':
var query = this.router.currentRoute.query;
// @TODO: logic form query params
break;
}
}
}
有了这个,路由器将为您管理历史记录,但您不必将代码分成组件。例如,我有一个非常小的页面,只想将所有内容放入同一个 viewModel 中,而不将所有内容分解为组件。
我有一个非常简单的页面,只有几行代码,我想使用没有 vue-component 的 vue-router。
我想获取root后的string "my-search-query"
:
www.example.com/my-search-query
并在我的主要 Vue() 对象中使用它。这可能吗?
谢谢!
正如tom_h所说,如果您只想获取路径名,可以使用window.location.pathname
。如果您想在此路径名更改时收到通知,请先将其初始化为您的 data(){} 对象并将其观察为:
data () {
return {
path: window.location.pathname
}
},
watch: {
path (newpath, oldpath) {
alert('location path just changed from ' + newpath + ' to ' + oldpath )
}
}
可以在没有 vue-component
的情况下使用 vue-router
,并且仍然会收到有关主 Vue() 应用程序对象中路径更改的通知:
您可以像这样从 www.example.com/#/my-search-query
获取 "my-search-query"
字符串:
const router = new VueRouter({
routes: [
{ path: '/:question' }
]
})
const app = new Vue({
el: '#app',
router,
watch: {
'$route.params.question': function(newVal, oldVal) {
alert(newVal === 'my-search-query');
}
}
});
感谢@samayo 为我指明了正确的方向!
由于路由器是您的视图模型实例的一部分,您可以创建一个计算函数,该函数 returns 路由器的路径值。例如,您可以执行以下操作:
data: function() {
router: new VueRouter()
},
computed: function() {
routerPath: function() {
return this.router.currentRoute.path;
}
},
watch: function() {
routerPath: function(val) {
switch(val) {
case '/':
// @TODO: logic for home
break;
case '/path1':
var query = this.router.currentRoute.query;
// @TODO: logic form query params
break;
}
}
}
有了这个,路由器将为您管理历史记录,但您不必将代码分成组件。例如,我有一个非常小的页面,只想将所有内容放入同一个 viewModel 中,而不将所有内容分解为组件。