我正在使用AngularJS + UI路由器编写一个CRUD应用程序。
我希望能够解析浏览器URL中的当前位置,并确定ui-router状态是否适用于当前网址。
在这些示例路线中,是否有某种方法可以执行if
和unless
条款?
(浏览器地址栏中的网址为http://example.com/notes/1/edit_me
)
$stateProvider.state("root", {
url: "",
unless: $location.matches(/\edit_me/)
})
$stateProvider.state("edit", {
url: "/edit",
if: $location.matches(/\edit_me/)
//
})
更新1 我想做上述事情的原因是:
说我在http://example.com/notes
。路线是
$stateProvider.state("root", {
url: "",
})
但是,使用相同的ui.route状态,当我在网址http://example.com/notes/edit
时,root
现在是" / notes / edit"而不是" / notes"
更新2 @adam,我想要完成的更多解释:
我将尝试解释:在您的代码中,对于您的home
州,(ui.router' s)url
是/
(也就是哈希语法{{1} }})
但是,浏览器地址栏中的网址在一种情况下为#!/
,在另一种情况下为http://example.com/notes/
。 (请注意,由于我们刚刚导航到该网页,因此网址不包含任何http://example.com/notes/edit
部分)
现在,#!
' s home
将在上述两种情况下匹配。
但由于第二个网址以/
结尾,我希望此网址的notes/edit
应为home
,而不是#!/edit
。
基本上我试图混合服务器端呈现的页面( #!/
和/notes
由服务器呈现,而不是AngularJS )
和客户端路由,以便无论我们在哪个URL,客户端都可以确定哪个(ui.router)路由适用于当前URL。
有意义吗?
答案 0 :(得分:0)
抱歉,我不太了解您的需求,但这是使用ui-router的一个例子:
$stateProvider
.state('home', {
url: '/',
templateUrl: 'app/main/index.html',
controller: 'MainCtrl'
})
$stateProvider
.state('edit', {
url: '/edit',
templateUrl: 'app/edit/edit.html',
controller: 'EditCtrl'
})
$stateProvider
.state('edit.note', {
url: '/note',
templateUrl: 'app/edit/note.html',
controller: 'NoteCtrl'
});
$urlRouterProvider.otherwise('/');
我不确定复制粘贴是否有效,但请尝试根据您的情况进行调整。希望它会有所帮助。
修改强>
我担心我无法帮助你。您的应用程序设计与渲染页面没有角度声音真的很特别。 你试过我给你的例子吗?如果是,您只需通过addind格式化网址
" #!/ "你需要它的地方。
例如:
$stateProvider
.state('edit', {
url: '#!/edit', //or something like, url:'/#!/edit'
templateUrl: 'app/edit/edit.html',
controller: 'EditCtrl'
});
检查此链接也可能会对您有所帮助:https://github.com/angular-ui/ui-router/issues/372
ui-sref 可能对您有所帮助 但是看到ui-router的有用示例的地方是他自己的doc。 https://github.com/angular-ui/ui-router
在这里: http://angular-ui.github.io/ui-router/site/#/api/ui.router