md-tabs 在其重复对象发生更改时失去范围 [AngularJS Material]
md-tabs loosing scope when the object its repeating on is changed [AngularJS Material]
请看这个codepen
只要您单击 UseDummy2 btn,它只会更改 md-tabs 重复的变量,我就会松开 $scope.selectedIndex
值。 $scope.selectedIndex
重置为 0 并选择第一个选项卡。
如何在更改 $scope.lineDirections 后保持所选选项卡?
我试过使用 $rootScope.selectedIndex 但还是不行。
ng-tab 有数组 "lineDirections" 的观察者,在这个观察者中,他们正在重置 attr md-selected ("selectedIndex") 的值,您可以通过使用闭包来维护它,如下所示:
$scope.useDummyArray1 = function () {
var selectedIndex = $scope.selectedIndex;
$timeout(function(){
$scope.selectedIndex = selectedIndex;
});
$scope.lineDirections = $scope.dummyArray1;
};
在所有三个函数中执行相同的操作。
超时代码将在 watcher 之后触发,这将再次设置 "selectedIndex"
的先前值
您也可以通过以下方式进行(但不应该使用这种方式,仅用于验证)
$scope.useDummyArray1 = function () {
for(var i=0;i<$scope.lineDirections.length;i++){
$scope.dummyArray1[i].$$hashKey = $scope.lineDirections[i].$$hashKey;
}
$scope.lineDirections = $scope.dummyArray1;
};
这将使 $$hashKey 的值保持不变,从而防止 angular 触发观察者。
但不推荐,原因如下:
1) $$hashKey 被 angular 内部使用,玩这些键不是个好主意。
2) 如果您的 "lineDirections" 长度不同,那么某些 $$hashKey 会发生变化。
请看这个codepen
只要您单击 UseDummy2 btn,它只会更改 md-tabs 重复的变量,我就会松开 $scope.selectedIndex
值。 $scope.selectedIndex
重置为 0 并选择第一个选项卡。
如何在更改 $scope.lineDirections 后保持所选选项卡?
我试过使用 $rootScope.selectedIndex 但还是不行。
ng-tab 有数组 "lineDirections" 的观察者,在这个观察者中,他们正在重置 attr md-selected ("selectedIndex") 的值,您可以通过使用闭包来维护它,如下所示:
$scope.useDummyArray1 = function () {
var selectedIndex = $scope.selectedIndex;
$timeout(function(){
$scope.selectedIndex = selectedIndex;
});
$scope.lineDirections = $scope.dummyArray1;
};
在所有三个函数中执行相同的操作。 超时代码将在 watcher 之后触发,这将再次设置 "selectedIndex"
的先前值您也可以通过以下方式进行(但不应该使用这种方式,仅用于验证)
$scope.useDummyArray1 = function () {
for(var i=0;i<$scope.lineDirections.length;i++){
$scope.dummyArray1[i].$$hashKey = $scope.lineDirections[i].$$hashKey;
}
$scope.lineDirections = $scope.dummyArray1;
};
这将使 $$hashKey 的值保持不变,从而防止 angular 触发观察者。 但不推荐,原因如下: 1) $$hashKey 被 angular 内部使用,玩这些键不是个好主意。 2) 如果您的 "lineDirections" 长度不同,那么某些 $$hashKey 会发生变化。