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 会发生变化。