好的,这是问题所在。我有一个应用程序,用户可以注册为商家,可以拥有自己的商店名称,我想要的网址是:
http://localhost:8000/#/storename
这与contactus, aboutus
等默认主页子页面发生冲突。以下是我ui-router
的实现。
.state('home', {
url: '/', --> http://localhost:8000/#/ [work]
templateUrl: 'views/main_home.html',
resolve: loadSequence('flexSlider','wantCtrl'),
css: 'assets/vendor/style.css'
})
.state('home.contact', {
url: '/contact', --> http://localhost:8000/#/contact [not work]
views: {
'homeView': {
templateUrl: 'partials/contact.html',
}
},
css: ['assets/vendor/style.css']
})
.state('store',{
url: '/:storename', --> http://localhost:8000/#/myshop [work]
templateUrl: 'views/main_store.html'
})
.state('store.list', {
url: '/lists', --> http://localhost:8000/#/myshop/lists [work]
views: {
'primView': {
templateUrl: 'views/store_home.html',
}
}
})
此处http://localhost:8000/#/contact
正在访问store
模板,就好像contact
是商店名称一样。默认无论继承home.[anything]
应该在父定义的模板下。我该如何解决这个问题?
有这样做的脏方法,即为每个子页面定义新的父级,但这将重复页眉和页脚部分布局。
答案 0 :(得分:0)
据我所知,角度在处理路线时采用从上到下的方法。所以定义
.state('store',{
url: '/:storename', --> http://localhost:8000/#/myshop [work]
templateUrl: 'views/main_store.html'
})
在所有其他路线之后。在你的情况下,当达到角度/:storename时,它会认为联系人是商店名称并加载该页面。要避免它,你需要保持最后