通常在单页应用程序(spa)中,我有一个页面,我有一个sidenav菜单。在该菜单中,有多个锚标签。
那些锚标记的url将由angular / react / sammy js路由器处理,主div将根据控制器返回的html进行刷新。
很简单,对吧?想象一个场景,用户通过浏览器地址栏直接访问锚标记URL。那么只有返回的html片段才会被加载到整个页面。
有没有办法处理这种情况;我的意思是,每当用户直接访问该网址时,他/她都会得到正确的解决?
修改
可能是我对问题陈述不太清楚。让我详细说明一下:
我的问题是,我们能否实施一些设计方法,以便这两种方法运作良好?
答案 0 :(得分:0)
使用React路由器,您只需处理onEnter
事件,当用户提供新URL时触发该事件。你可以这样做:
const onEnter = (e) => {
console.log(e.location.pathname);
}
/* ... */
<Route path="/" onEnter={onEnter} component={MyComponent} />
此示例应在控制台中记录新URL。您可以根据需要进一步解释它以进行适当的变异。
答案 1 :(得分:0)
最好选择角度ui-router
而不是sammy js router
,当然我不知道。但是在angular-ui-router
中,我们使用$stateProvider
ui-router
来定义状态和网址。即使用户直接在浏览器中输入了网址,只有在状态中定义的网址匹配时才能正确处理。
https://github.com/angular-ui/ui-router/tree/legacy请点击此处了解详情。
这是一个例子,
$stateProvider.state('',{
url: '/',
tempate: 'path/to/.html',
controller: 'controllerToHandle'
})
.state('home', {
url: '/home',
template: 'path/to/home.html',
controller: 'HmeCtrl'
})
.state('home.list',{ //defines child states with dot
url: '/list', //shows url as home/list because it is a child state
template: 'path/to/list.html'
})
如果没有匹配的路径,请使用$urlRouterProvider.otherwise('/')
同样,用户可以从home
遍历到list
例如,www.my-app.com
是您的主机名。如果他输入www.my-app.com/home/list
作为匹配的网址/home/list
,他将被带到home/list
页面,如果他输入了任何错误的网址,那么他将被带到home
页面,因为otherwise
方法。
如果react / sammy路由器中存在类似的内容,请执行此操作以获得更好的解决方案