【发布时间】:2016-07-08 16:13:10
【问题描述】:
我有一个包含md-tabs 的ui-router 模板,其中一些选项卡是静态的,其他选项卡是使用ng-repeat 迭代数据模型的给定数组动态创建的。
在这些动态创建的选项卡中,有三个按钮可以执行以下操作
- 将标签向左移动一位
- 将标签右移一位
move tab 按钮调用同一控制器内的函数。当前显示的选项卡的$index 值以及所需的方向(-1 用于向左移动,1 用于向右移动)将传递给函数。
因此视图的 HTML-sn-p 如下所示:
<md-content flex layout-padding>
<md-card>
<md-tabs md-dynamic-height md-border-bottom md-autoselect md-swipe-content md-selected="selectedTab">
<md-tab id="{{ 'tab' + $index }}" data-ng-repeat="tab in tabs track by $index">
<md-tab-label>Tab {{ $index + 1 }}</md-tab-label>
<md-tab-body>
<md-card-title>
<md-card-title-text>
<div flex layout="row">
<div flex><span class="md-headline">Tab {{ $index + 1 }}</span></div>
<div flex align="right">
<md-button ng-click="moveTab(-1, $index)">Move tab left</md-button>
<md-button ng-click="moveTab(1, $index)">Move tab right</md-button>
</div>
</div>
</md-card-title-text>
</md-card-title>
<md-card-content>
<p>This is tab {{ $index + 1 }}</p>
</md-card-content>
</md-tab-body>
</md-tab>
</md-tabs>
</md-card>
</md-content>
移动标签的功能在MainController中实现为:
$scope.moveTab = function(direction, TabIdx) {
var staticTabs = 3
var arr = $scope.tabs
var fromIdx = sectorIdx
var toIdx = tabIdx + direction
// correct `toIdx` in order to prevent index overflow for first/last array element
if (toIdx < 0) {
toIdx = arr.length - 1
} else if (toIdx > arr.length-1) {
toIdx = 0
}
else {
; // nothing to do here since `toIdx` does not need to be corrected
}
var tab = arr.splice(fromIdx, 1)[0]
arr.splice(toIdx, 0, tab)
$scope.selectedTab = staticTabs + toIdx
console.log($scope.selectedTab)
}
单击所需按钮移动选项卡后,根据需要显示相应选项卡邻居的数据。
这表明操作 $scope.tabs 数组可以正常工作。此外,日志消息显示,即使$scope.selectedTab 的新值也计算正确。
但是,视图中未选择新选项卡。
这让我很困惑,因此 $scope.tabs 和 $scope.selectedTab 两个变量都定义在同一个控制器中,并且应该是同一个 $scope 实例的一部分。
此外,操作后的$scope.tabs 数组在其他视图中使用并以新顺序显示选项卡数据,而$scope.selectedTab 的新值似乎不可用并且显示的选项卡没有更改。
【问题讨论】:
-
如果您像我一样通过搜索来到这里,请参阅(可能不重复相关)问题stackoverflow.com/questions/34936155/… 中的更多信息
标签: angularjs tabs angularjs-scope angular-ui-router angular-material