关于 angularjs:在 angular bootstrap 中设置初始静态选项卡

Setting the initial static tab in angular bootstrap

我似乎无法在angular引导选项卡集中设置初始选项卡。它总是将最左边的选项卡设置为活动状态。

给定 html:

1
2
3
4
<tabset>
    <tab heading="Static 1" active="data.static1">Static content</tab>
    <tab heading="Static 2" active="data.static2">Static content</tab>
</tabset>

和js:

1
2
3
4
angular.module('plunker', ['ui.bootstrap']);
var TabsDemoCtrl = function ($scope) {
  $scope.data = {static1: false, static2: true}
};

见机枪

2013 年 8 月 6 日更新:现已修复上游,请参阅 github 问题。


当指令运行时,(静态)选项卡似乎会覆盖传递给活动的任何内容。我认为这是一个错误。快速而肮脏,您可以使用 0 秒延迟的超时来设置活动状态。至少在 plunkr 中,这不会导致任何闪烁。在您的控制器中:

1
2
3
4
$scope.data = {};
$timeout(function() {
  $scope.data.static2 = true;  
}, 0)

http://plnkr.co/edit/3KbdKh?p=preview


我今天遇到了这个问题,我发现解决它的最短方法是使用 ng-init 设置它:

1
2
3
<tabset justified="true" ng-init="tabs[initialTab].isActive = true">
    <tab heading="Static 1" active="tabs.Inprogress.isActive"></tab>
    ...


所有版本的 angular-ui / bootstrap 到版本 0.6.0 都存在问题:

http://plnkr.co/edit/73lm068buZf851h47FVQ?p=preview

它在你必须自己构建的 bootstrap3 分支中工作:

http://plnkr.co/edit/uOASvZ71DzgZqODmHQP8?p=preview


您的代码可以在最新版本的 ui-bootstrap 中运行(测试版本 0.7.0 到 0.13.0 包括在内):
http://plnkr.co/edit/SzeTqXVSd8CiKL9nkjDC?p=preview

HTML:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<!DOCTYPE html>
<html ng-app="myApp">

  <head>
    <script data-require="[email protected]" data-semver="1.4.0" src="https://code.angularjs.org/1.4.0/angular.js">
    <script data-require="[email protected]" data-semver="0.13.0" src="http://angular-ui.github.io/bootstrap/ui-bootstrap-tpls-0.13.0.min.js">
    <link data-require="bootstrap-css@*" data-semver="3.3.1" rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css" />
    <script src="script.js">
  </head>

  <body ng-controller="ExampleController as example">
    <tabset>
      <tab heading="Static 1" active="data.static1">Static content1</tab>
      <tab heading="Static 2" active="data.static2">Static content2</tab>
    </tabset>
  </body>

</html>

JavaScript:

1
2
3
4
5
6
7
angular.module("myApp", ["ui.bootstrap"])
  .controller("ExampleController", function ($scope) {
    $scope.data = {
      static1: false,
      static2: true
    };
  });

需要注意的一个问题是,如果将 ngController 指令放在 元素上,这将不起作用。在上面的代码中,我在 元素上放置了 ngController 指令。