2015-06-09 18 views
7

Chcę uruchomić kod, jeśli otworzy się dowolny modal. Zwykle jestem czegoś takiego:Angular-ui: Czy otwarty jest jakiś mod?

$scope.$watch(function() { 
      return $modal.isOpenState; 
     }, function (val) { 
      //my code here 
     }, true 
    ); 

Ale ja nie wiem, co oglądać. Tak, mogę wykryć zdarzenia otwarte dla każdej instancji, takie jak:

modalInstance.opened.then(function() { 
    //my code here 
}); 

Ale to nie jest SUCHA.

P.S. Jestem również może zrobić coś podobnego $('.modal').hasClass('in') w $watch funkcji, ale jest to trochę brzydkie

PPS I btw używam UI-router, aby otworzyć czasowniki modalne (patrz FAQ here)

$modal.open({ 
     templateUrl: "...", 
     resolve: {... }, 
     controller: function($scope) { ... } 
    }).result.finally(function() { 
     //can put code here, but same issue 
    }); 
+0

jaki kod/dyrektywa użyć do obsługi swoich czasowniki modalne? które dają lepszy widok na to, jak $ obejrzyj je poprawnie – shershen

+0

Właściwie używam ui-routera i modów otwartych jak w tym faq (https://github.com/angular-ui/ui-router/wiki/Farquent- Zadawane pytania # how-to-open-a-dialogmodal-at-a-state-state) –

Odpowiedz

5

Jest wewnętrzny modul UI usług wewnętrznych nazywa się $modalStack. Ta usługa jest używana przez $modal i ma metodę o nazwie getTop do pobierania aktualnie otwartej instancji modalnej. Możesz więc wstrzyknąć tę usługę i po prostu obejrzeć getTop wynik na $rootScope. Na przykład:

app.run(function($rootScope, $modalStack) { 
    $rootScope.$watch($modalStack.getTop, function(newVal, oldVal) { 
     if (newVal) { 
      console.log('opened', newVal, oldVal); 
     } 
    }); 
}); 

Demo:http://plnkr.co/edit/ZVD0cryL0qXNGl9UPMxB?p=preview

+0

To jest genialne, wielkie dzięki. =) –

+0

Nie ma problemu, cieszę się, że pomogło! – dfsq

Powiązane problemy