我在互联网上搜索了几天,但找不到我要找的东西。
我正在使用 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?