我无法让 UI 路由器在我的页面上正常工作。它适用于导航链接,但不适用于我正在处理的特定部分。我能够在 plnkr ( http://plnkr.co/edit/unQKWfkoSGdqaoncEPgG ) 中重现该问题,甚至将其与运行良好的“官方” plnkr 进行比较,我看不出有任何差异。当我单击一个链接时,URL 会发生变化,但不会显示新页面。

$stateProvider
.state('home', {
  abstract: true,
  url: '/home',
  templateUrl: 'home.html',
  controller: function($scope){}
})
.state('home.resource', {
  url: '/resource',
  templateUrl: 'resource.list.html',
  controller: function($scope){}
})
.state('home.resource.edit', {
  url: '/edit/:id',
  templateUrl: 'resource.edit.html',
  controller: function($scope){}
});

这是点击链接的位置:
<a ui-sref='.edit({id: 1})'>Go to edit</a>

任何帮助表示赞赏。谢谢!

最佳答案

这是 updated plunker ,有这个更新

<h4>resource index list</h4>
<ul>
  <li><a ui-sref='.edit({id: 1})'>Go to edit</a>
  <!--
     this line below was added
     it is an anchor/target for unnamed view
     defined in the home.resource.edit state
   -->
  <div ui-view=""></div>
</ul>

所以我们可以看到,即使这个状态也需要自己的 anchor ,目标:
// this is the parent state
.state('home.resource', {
  url: '/resource',
  templateUrl: 'resource.list.html',
  controller: function($scope){}
})

// child state needs its own target <div ui-view="">
.state('home.resource.edit', {
  url: '/edit/:id',
  templateUrl: 'resource.edit.html', // this template will be injected into parent
  controller: function($scope){}
});

检查它 here

还有另一种选择。我们可以针对与父级相同的 ui-view。它实际上将替换父级。定义将是这样的 plunker 具有这种状态:
.state('home.resource.edit', {
  url: '/edit/:id',
  views : {
  '@home' : {
    templateUrl: 'resource.edit.html',
    controller: function($scope){}
    }
  }
});

我们在这里使用的是命名 View :

View Names - Relative vs. Absolute Names

关于javascript - UI 路由器更改 URL 但不更改页面,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26345611/

10-11 23:45