3

我正在尝试使用选项卡指令内的按钮更改我的活动选项卡uib-tabset,但该按钮仅在此指令之外工作。

我究竟做错了什么?

这是代码:

<button type="button" class="btn btn-default btn-sm" ng-click="active = 0">Select first tab - exterior button</button>

<div class="tabs-container">
    <uib-tabset active="active">
        <uib-tab index="0" heading="tab one">
            tab one
        </uib-tab>
        <uib-tab index="1" heading="tab two">
            tab two
            <button type="button" class="btn btn-default btn-sm" ng-click="active = 0">Select first tab - internal button</button>
        </uib-tab>
        <uib-tab index="2" heading="tab three">
            tab three
        </uib-tab>
    </uib-tabset>
</div>
4

2 回答 2

3

ng-click在您的情况下,在uib-tab指令内尝试写入外部范围原始变量,但在本地范围内创建具有相同名称(active)的局部变量,从而中断与外部范围的连接。最简单的方法是将 $parent.$parent 添加到您的内部点击中:

ng-click="$parent.$parent.active = 0"

这将达到正确的外部范围(外部范围 -> uib-tabset -> uib-tab),然后修改其变量,

另一个更好的解决方案是在父子范围之间交互时使用对象并修改其属性(如model.active ):

<button type="button" 
        class="btn btn-default btn-sm" 
        ng-click="model.active = 0">
  Select first tab - exterior button
</button>

<div class="tabs-container">
  <uib-tabset active="model.active">
    <uib-tab index="0" heading="tab one">
        tab one
    </uib-tab>
    <uib-tab index="1" heading="tab two">
        tab two
        <button type="button" 
                class="btn btn-default btn-sm" 
                ng-click="model.active = 0">
          Select first tab - internal button
        </button>
    </uib-tab>
    <uib-tab index="2" heading="tab three">
        tab three
    </uib-tab>
  </uib-tabset>
</div>
于 2016-10-04T20:25:24.123 回答
1

可以合理地确定页面上的两个范围之间存在一些沟通不畅(uib-tabset可能会创建它自己的范围,它不会active像我们希望的那样跟踪您的范围变量)。

看看这个工作的 plunker - 你会注意到它使用ctrl as语法来更明确地定义要设置的范围变量ng-click

这是一个关于在此处找到uib-tabset的范围内的 2-way-binding 问题的问题,这可能是问题的原因。我建议使用或者您可以绑定到 $scope 函数来设置而不是绑定到变量本身。ctrl as$scope.activeactive

于 2016-10-04T20:12:03.923 回答