2017-12-15 8 views
0

In this plunk Ich habe eine Angular UI modal, die beim Öffnen für eine Sekunde ausgeblendet und dann angezeigt werden sollte. Ich benutze ng-show in der Vorlage selbst, aber das verbirgt den Inhalt, nicht das modale. Wie versteckt man das Modal? Beachten Sie, dass das Modal direkt nach console.log("opened") angezeigt wird, ohne auf console.log("displayed") zu warten.Angular UI anzeigen Modal eine Sekunde nach dem Öffnen

Javascript:

var app = angular.module('app', ['ui.bootstrap']); 
app.controller('ctl', function() {}); 

app.directive("theModal", function($uibModal,$timeout) { 
      return { 
      restrict: "AE",   
      link: function (scope, element, attrs) { 

        scope.show = false; 
        console.log("opened"); 
        scope.instance = $uibModal.open({ 
         windowClass: 'app-modal', 
         template: '<div ng-show="show">MODAL WAS LOADED</div>' 
        }); 

        $timeout(function(){ 
         scope.show = true; 
         console.log("displayed"); 
        },1000) 

      } 
     } 
    }); 

Antwort

1

Versuchen Sie, diese

var app = angular.module('app', ['ui.bootstrap']); 
app.controller('ctl', function() {}); 

app.directive("theModal", function($uibModal,$timeout) { 
     return { 
     restrict: "AE",   
     link: function (scope, element, attrs) { 

       console.log("opened"); 

       $timeout(function(){ 
        scope.instance = $uibModal.open({ 
        windowClass: 'app-modal', 
        template: '<div >MODAL WAS LOADED</div>' 
        }); 
        console.log("displayed"); 
       },1000) 

     } 
    } 
}); 
+0

Leider wird dies in meinem Fall nicht funktionieren, in der Frage, die ich den Timeout als eine Funktion verwendet, die in der Zukunft abgeschlossen ist, aber in meinem wirklichen Szenario ist es kein Timeout, es ist eine andere Funktion. Ich muss warten, bis diese Funktion endet und erst dann das Show-Flag als wahr setzen. – ps0604

+0

'..und erst dann setzen Sie das..', verwenden Sie ein Versprechen – svarog

+0

@svarog ja, ich könnte ein Versprechen verwenden, aber ich muss immer noch das' show/hide'-Flag auf der modalen Ebene und nicht auf der Inhaltsebene setzen Das ist die Hauptschwierigkeit. – ps0604

Verwandte Themen