如何有条件地切换到ui-router状态?

时间:2015-04-13 19:48:43

标签: angularjs angular-ui-router

我正在使用AngularJS + UI路由器编写一个CRUD应用程序。

我希望能够解析浏览器URL中的当前位置,并确定ui-router状态是否适用于当前网址。

在这些示例路线中,是否有某种方法可以执行ifunless条款?

(浏览器地址栏中的网址为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。

有意义吗?

1 个答案:

答案 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