2013-10-29 14 views
13

Sto usando bootstrap-angular-ui-modal per un sito sto lavorando. Il codice che sto usando per aprire il modalBootstrap-angolare-ui del carico

$modal.open(
    { 
     templateUrl: '/home/template', 
     controller: myCtrl, 
     resolve: { 
      data: function() { 
       return data; 
      } 
     } 
    }); 

Tutto sta funzionando benissimo. Ma ho bisogno di trovare un modo per eseguire del codice dopo modale viene caricato. Ho provato cose diverse ma non riesco a farle funzionare. Alcune delle cose che ho provato

Nel modello ho fatto

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

ho trovato anche c'è una promessa per l'oggetto modale angolare di nome openned. Ho provato a

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

non funziona neanche. Posso usare qualche aiuto qui.

risposta

6

Questo non è sicuramente una buona soluzione, ma a meno ha funzionato per me. Ho appena aggiunto un timeout prima di eseguire la funzione desiderata,

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

UI-bootstraps modale ha una risoluzione result.

"aperto" - una promessa che si risolve quando un modale viene aperto dopo modello di download di contenuto e risolvere tutte le variabili

o

Usa ng-init. Creare un div all'interno del vostro file di modello:

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

tentarono 'promessa opened'. viene chiamato prima che venga caricato il modal. è per questo che i codici jquery vincolanti non funziona. e circa ng-init - 'L'unico uso appropriato di ngInit per aliasing proprietà speciali di ngRepeat, come si è visto nella demo di seguito. Oltre a questo caso, dovresti usare i controller piuttosto che ngInit per inizializzare i valori su un ambito. – Muctadir

+0

E come dire al controller di iniziare a creare? è la domanda qui. Perché ng-init = "mycontroller.init()" è il male? – amdev

1

Se hai intenzione di fare qualcosa dopo che il DOM è stato caricato, è meglio fare una cosa del genere all'interno di una direttiva. Vedi qui: http://docs.angularjs.org/guide/directive#creating-a-directive-that-manipulates-the-dom

Si potrebbe segnare il corpo modale (o qualcosa all'interno del modale) con l'attributo direttiva, quindi creare la direttiva in questo modo:

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

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

questo non sembra funzionare nel $ modalInstance Controller – Kirby

+0

Quale parte non funziona? Dove si sta abbattendo per te? – jdmcnair

3

Since version 0.13.0, c'è una promessa rendered è possibile utilizzare.

rendered(Tipo: promise) - si risolve quando un modale viene reso.

Esempio:

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