我一直在研究这个问题已经有一段时间了,无法弄清楚为什么它不起作用。 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
我的角度代码看起来像这样。
this.panelTabs = [
{
name: "package-price",
tabNum: 1
},
{
name: "package-description",
tabNum: 2
}
];
我已经阅读了各种答案,并尝试了很多东西,但觉得它一定是我想念的傻事。任何帮助将不胜感激。
谢谢,保罗
答案 0 :(得分:3)
设置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
作为控制器的别名来使用它。现在将tab变量放在控制器变量中,如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>