【问题标题】:ng-show angular tab with ng-repeat带有 ng-repeat 的 ng-show 角度制表符
【发布时间】:2015-12-02 07:08:54
【问题描述】:

我已经为此工作了一段时间,但无法弄清楚为什么它不起作用。 This 是我想要创建的效果-http://plnkr.co/edit/RAeIwFbn2Zoe9WfLdMX8?p=preview。我希望创建一个标签栏,点击后会显示不同的信息。

这是我到目前为止的代码,但由于某种原因它不起作用:

HTML

<ul class="nav nav-pills">
 <li ng-repeat="tablet in Packages.panelTabs">
    <a href ng-click="tab = tablet.tabNum"> 
      {{tablet.name}}
    </a>
 </li>
    <p ng-show="tab === 1"> Tab1 content </p>           
    <p ng-show="tab === 2"> Tab2 content</p> 
 </ul>

JS

我的 Angular 代码如下所示。

this.panelTabs = [

            {
                name: "package-price",
                tabNum: 1
            },
            {
                name: "package-description",
                tabNum: 2
            }
        ];

我已经阅读了各种答案并尝试了很多东西,但我觉得这一定是我想念的愚蠢的东西。任何帮助将不胜感激。

谢谢,保罗

【问题讨论】:

  • 试试Packages.tab = tab.tabNum

标签: javascript angularjs angularjs-ng-repeat ng-show angularjs-controlleras


【解决方案1】:

在设置tab 模型时,请使用$parent 关键字在父范围内声明它。每次迭代 ng-repeat 指令的原因确实会创建一个新的原型继承范围。

标记

<li ng-repeat="tablet in Packages.panelTabs">
   <a href ng-click="$parent.tab = tablet.tabNum"> 
      {{tablet.name}}
   </a>
</li>

@azium 建议使用controllerAs,因为您已经通过使用Packages 作为控制器的别名来使用它。现在将选项卡变量放入您的控制器变量中,例如 Packages.tab

标记

<li ng-repeat="tablet in Packages.panelTabs">
   <a href ng-click="Packages.tab = tablet.tabNum"> 
      {{tablet.name}}
   </a>
</li>
<p ng-show="Packages.tab === 1"> Tab1 content </p>           
<p ng-show="Packages.tab === 2"> Tab2 content</p> 

【讨论】:

  • 看起来他可能会使用controller as,所以Packages而不是$parent会更好。
  • @azium 比 dot rule 更好,同时声明模型
  • @azium 好喊,已将其更改为 Packages.tab 并且它可以工作,现在更有意义。谢谢你们俩
  • @PankajParkar controller as 不执行点规则?在您的第二个示例中,您仍然没有提到controller as 的全部意义的范围
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-26
相关资源
最近更新 更多