我在互联网上搜索了几天,但找不到我要找的东西。
我正在使用 angularjs 构建一个 SPA,但我正在努力解决我认为应该非常基本的事情。出于一种ASP.NET MVC
心态,我正在尝试设置用于列出数据和创建新数据的路线,例如:
.state('placements', {
abstract: true,
url: '/placements',
template: '<div ui-view></div>'
})
.state('placements.list', {
url: '',
templateUrl: mapPathToViews('placements.list'),
controller: 'PlacementController'
})
.state('placements.new', {
url: '/new',
templateUrl: mapPathToViews('placements.new'),
controller: 'PlacementController'
})
因此,在设置了这些状态后,我认为导航到/placements/new
会给我“新展示位置”视图。
如果我使用 ui-sref 导航,这将非常有效
问题来自当我myapp.com/placements/new
在浏览器中输入并点击 GO 时,根本没有匹配的路线。但是,如果我去,myapp.com/placements
我会按预期看到正确的视图。
我的问题是:我认为应该如何设置路由器是正确的,还是我需要为新的位置设置一个完全独立的状态,例如myapp.com/newplacement
?
更新
这似乎与 ui-router 在第一页加载时计算状态的方式有关。如果我使用 url 加载页面myapp.com/placements/new
,然后单击指向具有 url 的状态的导航项'/'
(意思是主页,对吗?)然后 url 变为myapp.com/placements/
并呈现主页视图。同样,如果我单击另一个指向'/somewhereelse'
url 的导航链接myapp.com/placements/somewhereelse
,somewhereelse
则会呈现视图。我猜想当它加载/placements/new
它时(出于某种原因)实际上是在寻找一个根状态,其 url/new
不存在。
当我添加$urlRouterProvider.otherwise('/not-found');
并重新加载页面时/placements/new
,这一点得到了证明,url 变为myapp.com/placements/not-found
.
这是一个错误吗?(抱歉,未记录的功能)还是我这里有问题?
另一个更新。
好的,这让我很头疼。
我想我会尝试破解一些东西来解决这个问题,并认为我会通过添加一个/new
状态并调用$state.transitionTo('placements.new')
它而侥幸逃脱,一切都会好起来的。事实证明,如果我这样做,网址就会变成myapp.com/placements/placements/new
- wtf?