2013-10-29 17 views
13

Ich benutze bootstrap-angular-ui-modal für eine Website, die ich arbeite. Der Code, den ich benutze, um das ModalBootstrap-angular-ui modal auf Last

zu öffnen

Alles funktioniert einwandfrei. Aber ich muss einen Weg finden, um Code nach dem Laden von Modal auszuführen. Ich habe verschiedene Dinge ausprobiert, kann sie aber nicht arbeiten lassen. Einige Dinge habe ich versucht,

In Vorlage I

tat
<script> 
    document.onload = function() { 
     console.log('opened'); 
    }; 
</script> 

Ich fand auch, es ist ein Versprechen für die Winkel modalen Objekt mit dem Namen openned. Ich habe versucht,

modalInstance.opened.then(function(){console.log('hello')}); 

funktioniert auch nicht. Ich kann hier Hilfe gebrauchen.

Antwort

6

Dies ist definitiv keine gute Lösung, aber bei hat am wenigsten für mich gearbeitet. Habe ich nur noch ein Timeout, bevor die gewünschte Funktion ausgeführt wird,

modalInstance.opened.then(
    $timeout(function() { 
      console.log('hello'); 
     }, delay)); 
5

UI-Bootstraps modal hat eine result Auflösung.

„geöffnet“ - ein Versprechen, das gelöst wird, wenn ein modale nach Herunterladen Inhalt der Vorlage und die Lösung aller Variablen

oder

Verwendung ng-init geöffnet wird. Erstellen Sie ein div in Ihrer Vorlagendatei:

<div ng-init="func()"></div> 
+6

versucht 'opened' Versprechen. wird aufgerufen, bevor Modal geladen wird. Deshalb funktionieren jQuery-Bindungscodes nicht. und über ng-init - 'Die einzige geeignete Verwendung von ngInit zum Aliasing spezieller Eigenschaften von ngRepeat, wie in der folgenden Demo gezeigt. Neben diesem Fall sollten Sie Controller anstelle von ngInit verwenden, um Werte auf einem Bereich zu initialisieren. – Muctadir

+0

Und wie an den Controller zu init auf create zu sagen? Es ist die Frage hier. Warum ist ng-init = "mycontroller.init()" böse? – amdev

1

Wenn Sie wollen, etwas zu tun, nachdem das DOM geladen wird, ist es am besten, so etwas in einer Richtlinie zu tun. Siehe hier: http://docs.angularjs.org/guide/directive#creating-a-directive-that-manipulates-the-dom

Sie Ihre modal Körper markieren könnten (oder etwas in der modal) mit Ihrer Richtlinie Attribut, dann erstellen Sie die Richtlinie wie folgt:

App.directive('myDirective', function($timeout) { 
     function link(scope, element, attrs) { 
      $timeout(function() { 
       // stuff to do after DOM load here 
      }); 
     } 

     return { 
      link: link 
     }; 
    }); 
+0

dies scheint nicht in der $ modalInstance Controller – Kirby

+0

funktioniert, welcher Teil funktioniert nicht? Wo bricht es für dich zusammen? – jdmcnair

3

Since version 0.13.0, gibt es eine rendered Versprechen Sie verwenden können.

rendered(Typ: promise) - aufgelöst wird, wenn ein modaler gemacht wird.

Beispiel:

this.modalInstance.rendered.then(function() { 
    console.log("modal is rendered"); 
});