2015-01-05 19 views
9

Sto tentando di visualizzare una modale quando viene caricata la vista.Errore di tipo: Impossibile leggere la proprietà "childNodes" di indefinito

Codice:

//View 
<div id="showCom" ng-controller="showmodalCtrl" ng-init="init()"> 

<div class="modal fade" id="companyModal" role="dialog"> 
<div class="modal-dialog"> 
    <div class="modal-content"> 
    <div class="modal-header"> 
     <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button> 
     <h4 class="modal-title">Please Select Company</h4> 
    </div> 
    <div class="modal-body"> 
    <form> 
     <div class="form-group"> 
     <label class="control-label">Recipient:</label> 
     <input type="text" class="form-control"> 
     </div> 
    </form> 
    </div> 
    <div class="modal-footer"> 
     <button type="button" class="btn btn-primary">Submit</button> 
    </div> 
    </div> 
</div> 
</div> 

//Controller 
.controller('showmodalCtrl', ['$scope', function($scope){ 

$scope.init = function(){ 
    $('#companyModal').modal("show"); 
} 
}]) 

Tutto funziona bene e viene visualizzato il modal ma ottengo questo errore sulla console:

Type error : Cannot read property 'childNodes' of undefined 

Non ho idea del perché questo sta succedendo. Anche se rimuovo il "modulo" dal modale, non ricevo alcun errore. Quindi immagino che il problema sia con il modulo ma non sono in grado di risolverlo.

Grazie in anticipo.

+0

hai incluso 'jQuery'? Stai usando il selettore '$ ('# companyModal')' per selezionare un elemento con 'jQuery'. –

+0

@MohitPandey .. Sì, ho incluso jquery – Zee

+0

È abbastanza difficile rintracciare l'errore con questo codice. Prova a creare un http://jsfiddle.net/ di esso. Inoltre, il controller interno '$' è un riferimento di angular not jQuery. Prova ad usare 'jQuery ('# companyModal')'. –

risposta

2

Siamo spiacenti per la modifica. Il tuo HTML è ben formato? Verifica che tutti i tag corrispondano.

Nello snippet di codice, sembra che manchi un div di chiusura. controllare che - quello che chiude il controller div.

39

Ho avuto lo stesso problema e sono riuscito a risolverlo avvolgendo la funzione di apertura modale all'interno di una funzione $ timeout() o una normale funzione setTimeout().

setTimeout(function(){ 
    jQuery('#messageModal').modal('show'); 
}, 0); 
+0

Questo problema setTimeout() è sempre presente in Javascript. Ho affrontato questo un sacco di volte. Comunque, ho ricominciato da zero e ora lavora per me, senza la funzione di timeout. – Zee

+1

Salvato la mia vita! Questo dovrebbe essere contrassegnato come accettato. – lbarman

11

Ho avuto lo stesso messaggio di errore quando si tenta di utilizzare un plug-in JQuery. L'esecuzione dopo che il documento è pronto ha risolto il problema per me. Il plug-in funzionava correttamente ma il codice angolare seguito nell'attuale ambito non lo era.

Era il "set timeout" -answer in questo thread che mi ha portato a provare questa soluzione.

soluzione per me:

angular.element(document).ready(function() { 
    //Angular breaks if this is done earlier than document ready. 
    setupSliderPlugin(); 
}); 
2

ho avuto un problema simile. Avrebbe generato un'eccezione quando ho provato ad aggiungere un html a dom e lo compilavo usando $ compile in angularJs.

enter image description here

All'interno del HTML è stato un'altra direttiva che ha cercato di aggiungere qualche elemento DOM dalla pagina da qualche altra parte nella pagina.

Ho appena dovuto chiamare .clone di quell'elemento prima di spostarlo nella nuova posizione. E l'eccezione era sparita.

$popupContent = $(attrs.popupSelector).clone(); 
$container = $('<div class="popup-container"></div>'); 
$container.append($popupContent); 
$container.hide(); 
$('body').append($container); 
3

Come un'altra soluzione nel contesto AngularJS sto usando questo approccio:

  1. Includere modulo $timeout nel controller JS
  2. Run init() funzione con tutti gli inizializzatori come questo:

    $ timeout (init, 0);

opere buone.

Problemi correlati