如何使AngularJS uib-tabset中的选项卡可链接?

时间:2017-06-19 16:55:08

标签: angularjs hyperlink angular-ui-bootstrap-tab

我有类似的东西:

<uib-tabset active="vm.activeTab">
    <uib-tab index="0" heading="First"> </uib-tab>
    <uib-tab index="1" heading="Second"> </uib-tab>
...
<uib-tabset>

我的控制器识别...#page&tab=second在此处导航(通过查找选项卡名称并获取为活动选项卡设置的索引)。如何公开每个标签的URL,以便用户可以将其加入书签或通过电子邮件发送给某人或其他任何人?

我可以添加ng-click处理程序。我尝试了更新location.href,但它刷新了页面。我看到了建议history.pushState()history.replaceState()的答案,但似乎有同样的问题。

我可以设置选项卡的href,这样用户就可以从选项卡上的上下文菜单中选择“复制链接地址”,但由于选项卡是一个空{{1}的锚点我担心这会改变行为。 (无论如何,我无法弄清楚如何设置href。)

也许我可以在上下文菜单中添加“复制标签地址”等。

我审核了how to change route for each tab in uib-tabset,但那里的答案没有提到href,甚至认为这似乎是问题所在。

1 个答案:

答案 0 :(得分:0)

您可以使用深层链接来实现目标。

这篇文章可以帮到你 deep link using ui-router

我们知道ui-router是在角应用程序中管理到另一个状态的路由的最流行的方式。在这里,我们创建一个父状态,其中包含其他子状态。现在,当您向他们提供网址时,它将作为普通网址,可以加入书签或发送给某人。

$stateProvider
  .state("main", { abstract: true, url:"/main", templateUrl:"main.html" })
  .state("main.tab1", { url: "/tab1", templateUrl: "tab1.html" })
  .state("main.tab2", { url: "/tab2", templateUrl: "tab2.html" })
  .state("main.tab3", { url: "/tab3", templateUrl: "tab3.html" });
})

现在通过添加ng-repeat来生成选项卡列表并设置值以选择和激活

<tabset>
  <tab
    ng-repeat="t in tabs"
        heading="{{t.heading}}"
        select="go(t.route)"
        active="t.active">
  </tab>
</tabset>

此状态的控制器将如下所示

$scope.go = function(route){
  $state.go(route);
};

$scope.active = function(route){
  return $state.is(route);
};

$scope.$on("$stateChangeSuccess", function() {
  $scope.tabs.forEach(function(tab) {
    tab.active = $scope.active(tab.route);
  });

这种方式可以做到