2017-06-24 9 views
6

Proszę spojrzeć na ten codepenMD-tabs tracąc zakresu gdy obiekt powtórzenia na zostanie zmieniona [angularjs Materiał]

Jak najszybciej kliknij UseDummy2 BTN który nic nie robi, ale zmienić zmienną, w którym MD -tabs powtarza się, tracę wartość $scope.selectedIndex. $scope.selectedIndex zostaje zresetowany do 0 i wybrana jest pierwsza karta.

Jak mogę zachować wybraną zakładkę nawet po zmianie $ scope.lineDirections?

Próbowałem użyć $ rootScope.selectedIndex, ale nadal nie działa.

+0

Pytania dotyczące pomocy przy debugowaniu ("dlaczego ten kod nie działa?") Muszą zawierać pożądane zachowanie, konkretny problem lub błąd oraz ** najkrótszy kod niezbędny do odtworzenia go w pytaniu. ** – georgeawg

+0

Witaj, gerogeawg , Wierzę, że mam wszystkie komponenty w moim oryginalnym pytaniu, o którym wspomniałeś w swoim komentarzu: pożądane zachowanie: Jak mogę zachować wybraną zakładkę nawet po zmianie $ scope.lineDirections? Kroki niezbędne do odtworzenia błędu: Po kliknięciu przycisku UseDummy2 btn, który nic nie zmienia, zmieniając zmienną, na której powtarzane są tabele md, tracę wartość $ scope.selectedIndex. Wartość $ scope.selectedIndex zostanie zresetowana do 0 i wybrana zostanie pierwsza karta. –

+0

@ManishPradhan Twój kod wydaje się działać. Nie jestem w stanie odtworzyć błędu – Vivz

Odpowiedz

3

ng JOT obserwatora dla układów „lineDirections” w tym obserwatora są resetowanie wartość ATTR MD wybrany („selectedIndex”), można utrzymać za pomocą zamknięcia w sposób następujący:

$scope.useDummyArray1 = function() { 
     var selectedIndex = $scope.selectedIndex; 
     $timeout(function(){ 
     $scope.selectedIndex = selectedIndex; 
     }); 
     $scope.lineDirections = $scope.dummyArray1; 
    }; 

zrobić to samo we wszystkich trzech funkcjach. kod Timeout zadziała po strażnika, który ponownie ustawi poprzednią wartość „selectedIndex”

można również zrobić to w następujący sposób (ale nie powinno się używać w ten sposób, tylko w celu weryfikacji)

$scope.useDummyArray1 = function() { 
    for(var i=0;i<$scope.lineDirections.length;i++){ 
     $scope.dummyArray1[i].$$hashKey = $scope.lineDirections[i].$$hashKey; 
    } 
    $scope.lineDirections = $scope.dummyArray1; 
}; 

dzięki temu wartość $$ hashKey pozostanie niezmieniona, co zapobiegnie obserwatorowi kątowemu. ale nie jest to zalecane z następującego powodu: 1) $$ hashKey jest używane wewnętrznie w kanciastym, nie jest to dobry pomysł, aby grać tymi kluczami. 2) jeśli twoja długość "lineDirections" jest inna, to będzie przypadek, gdy zmieni się trochę klucza hasha $$.

Powiązane problemy