Javascript Angularjs:动态创建的选项卡未处于活动/选中状态

Javascript Angularjs:动态创建的选项卡未处于活动/选中状态,javascript,angularjs,angular-bootstrap,Javascript,Angularjs,Angular Bootstrap,我有下面的angularjs代码,它通过按new按钮创建选项卡。但是新创建的选项卡在创建后不会被激活或选中。总是前一个激活! 有人知道怎么回事吗 plnkr: HTML: <!doctype html> <html ng-app="plunker"> <head> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.0/angular.js"></scr

我有下面的angularjs代码,它通过按new按钮创建选项卡。但是新创建的选项卡在创建后不会被激活或选中。总是前一个激活! 有人知道怎么回事吗

plnkr:

HTML:

<!doctype html>
<html ng-app="plunker">
  <head>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.0/angular.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.0/angular-animate.js"></script>
      <script src="//angular-ui.github.io/bootstrap/ui-bootstrap-tpls-1.2.5.js"></script>
    <script src="example.js"></script>
         <link href="//netdna.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet">



  </head>
  <body>

<div ng-controller="TabsParentController">


   <script type="text/ng-template" id="myModalContent.html">
        <div class="modal-header">
            <h3 class="modal-title">I'm a modal!</h3>
        </div>
        <div class="modal-body">
            <ul>
               Sure to delete?
            </ul>
            Selected: <b>{{ selected.item }}</b>
        </div>
        <div class="modal-footer">
            <button class="btn btn-primary" type="button" ng-click="ok()">OK</button>
            <button class="btn btn-warning" type="button" ng-click="cancel()">Cancel</button>
        </div>
    </script>


    <uib-tabset active="active">

        <uib-tab ng-repeat="workspace in workspaces"
             heading="{{workspace.name}}"
             >
            <div ng-controller="TabsChildController">
                <div>
                    {{$parent.workspace.id}} : {{ $parent.workspace.name}}
                </div>
                <input type="text" ng-model="workspace.name"/>
                 <button class="btn" type="button" ng-click="open('sm',workspace)">Delete</button>
            </div>     
        </uib-tab>
      <uib-tab index="0" select="addWorkspace()">
              <uib-tab-heading>
                <i class="glyphicon glyphicon-plus"></i>
            </uib-tab-heading>
        </uib-tab>
    </uib-tabset>
</div>
  </body>
</html>

如果希望最新选项卡处于活动状态,则需要设置

$scope.active = $scope.workspaces.length;
但另一个问题是,当你推一个新的工作区时。指令重新呈现DOM并准备好所有范围变量需要一些时间。因此,在推送之后,如果尝试将最新选项卡指定为活动选项卡,将导致错误

所以,为了快速证明我的观点(不是最正确的方法),尝试一下这个,你的代码就会起作用。记住将$timeout作为依赖项注入

app.controller("TabsParentController", 
    function ($scope,$uibModal, $timeout) {


        ....
        ....

        $scope.workspaces.push({
            id: id,
            name: "Workspace " + id,
        });

        //introduce a 50 ms delay before setting the active tab
        $timeout(function(){
           $scope.active = $scope.workspaces.length;
        }, 50);

        ....
        ....

    }
);

如果希望最新选项卡处于活动状态,则需要设置

$scope.active = $scope.workspaces.length;
但另一个问题是,当你推一个新的工作区时。指令重新呈现DOM并准备好所有范围变量需要一些时间。因此,在推送之后,如果尝试将最新选项卡指定为活动选项卡,将导致错误

所以,为了快速证明我的观点(不是最正确的方法),尝试一下这个,你的代码就会起作用。记住将$timeout作为依赖项注入

app.controller("TabsParentController", 
    function ($scope,$uibModal, $timeout) {


        ....
        ....

        $scope.workspaces.push({
            id: id,
            name: "Workspace " + id,
        });

        //introduce a 50 ms delay before setting the active tab
        $timeout(function(){
           $scope.active = $scope.workspaces.length;
        }, 50);

        ....
        ....

    }
);


这是如何工作的
uib tabset active=“active”
?它看起来像一个指令,但我在你的代码中找不到任何指令定义。@eml.c它的angularjs引导标记,由://angular-ui.github.io/bootstrap/ui-bootstrap-tpls-1.2.5.JS导入。它是如何工作的?@eml.c你将JS库导入html并使用这些指令创建控件,你可以在这里阅读更多::我确实错过了一些东西,因为我还没有真正深入地理解这个问题。答案完全正确,很抱歉我的问题有误导性。这个
uib tabset active=“active”
是如何工作的?它看起来像一个指令,但我在你的代码中找不到任何指令定义。@eml.c它的angularjs引导标记,由://angular-ui.github.io/bootstrap/ui-bootstrap-tpls-1.2.5.JS导入。它是如何工作的?@eml.c你将JS库导入html并使用这些指令创建控件,你可以在这里阅读更多::我确实错过了一些东西,因为我还没有真正深入地理解这个问题。答案完全正确,很抱歉我的问题误导了你。谢谢你的回答,是的,看来你是对的。有没有办法在成功完成AddNewTab函数后创建一个设置活动选项卡的函数?我正在寻找类似的get.then或get或success,它可以在成功完成get后调用函数!函数有这样的东西吗?@user3033921当我第一次看到你的问题时。我的问题和艾米丽完全一样。如果您可以等待指令准备就绪,然后将其设置为活动,这将是最理想的。对于这一部分,您可能需要自己查找文档。我的回答是一个概念的证明,有一点搅动,你需要等待。Cheers@user3033921我觉得您的代码是OdeToCode示例的修改版本。我的直觉告诉我,当前设置确实与您导入的角度模块有一些冲突,而且它似乎不正确。您应该找到一些更好的示例,说明如何以编程方式设置选项卡。我没有使用过角度版本的bootstrap,我可以告诉你有很多有竞争力的选择。我建议使用角材料。@ji_incoding谢谢。我会调查的。我是新来安格拉的。谢谢你的回答,是的,看来你是对的。有没有办法在成功完成AddNewTab函数后创建一个设置活动选项卡的函数?我正在寻找类似的get.then或get或success,它可以在成功完成get后调用函数!函数有这样的东西吗?@user3033921当我第一次看到你的问题时。我的问题和艾米丽完全一样。如果您可以等待指令准备就绪,然后将其设置为活动,这将是最理想的。对于这一部分,您可能需要自己查找文档。我的回答是一个概念的证明,有一点搅动,你需要等待。Cheers@user3033921我觉得您的代码是OdeToCode示例的修改版本。我的直觉告诉我,当前设置确实与您导入的角度模块有一些冲突,而且它似乎不正确。您应该找到一些更好的示例,说明如何以编程方式设置选项卡。我没有使用过角度版本的bootstrap,我可以告诉你有很多有竞争力的选择。我建议使用角材料。@ji_incoding谢谢。我会调查的。我对angularjs是新手