2016-06-18 8 views
5

La prima volta che si utilizza angularJS qui. Fondamentalmente, ho usato il servizio di routing, quindi ho una chiamata di routing in un modello con codice html al suo interno. Ho anche tutte queste normali funzioni javascript necessarie per la visualizzazione corretta del codice nel modello (presentazioni e molte altre cose).Come utilizzare il javascript normale per il codice all'interno di ng-view (angularjs)

Quando corro ottengo tutti questi errori nulli (sembra che le mie funzioni JS non riescano a trovare vari elementi perché non possono accedere al codice nel modello di visualizzazione ng o sono stati eseguiti prima che ng-view/template sia stato caricato) .

Quando ho incollato tutte le mie funzioni javascript nel controller che ho assegnato per quel modello, ha funzionato. Ma ho la sensazione che non dovrei farlo. Qual è il modo corretto per farlo funzionare? Grazie.

var app = angular.module("myApp", ["ngRoute"]); 
app.config(function($routeProvider){ 
    $routeProvider 
    .when("/",{ 
     templateUrl:"about.html", 
     controller:"aboutCtrl" 
    }) 
    .when("/aboutus", { 
     templateUrl:"entertainment.html" 
    }) 
}); 

app.controller('aboutCtrl', function($scope){ 
    //placed regular javascript/jquery code here to make it work 
}); 

risposta

3

funzioni Il jQuery probabilmente non funzionano, perché gli elementi su cui devono essere eseguiti non può essere trovato quando si è su una strada diversa.

modi per risolvere che:

  • modo più pulito: Avvolgere la presentazione in una direttiva angolare, in cui si definisce il suo modello HTML e il suo codice necessario. Il codice verrà eseguito solo se viene chiamato il modello. Dato che stai iniziando con Angular, probabilmente avresti bisogno di ulteriore aiuto su questo.
  • Inserisci il codice nel modello: Puoi anche provare a inserire il tuo JS necessario nel modello tramite uno script > </script>. In questo modo il codice verrà valutato solo quando il modello è caricato.
  • Come hai detto, puoi anche inserire il codice nel controller. Ma sarà gonfiare il tuo controller e rendere il codice disordinato rapidamente

Opzioni 2 & 3 funzionerà, ma sarà anche rapidamente trasformare la vostra applicazione in una grande confusione. Consiglio vivamente di scavare di più in direttive angolari, per mantenere pulito il tuo codice.

Forse this tutorial potrebbe essere un buon punto di partenza per voi.

+0

grazie mille. Cercherò di più e tenterò la prima soluzione in quanto sembra la più elegante. – goldensausage

+0

Sono riuscito a mettere tutto il mio codice javascript in direttive separate (usando templateUrl per collegare un file html contenente solo il codice JS). Ma un altro problema è sorto. offsetHeight sta segnalando altezze errate di alcune div con testo in esse (riporta corretto dopo l'aggiornamento di nuovo). Ho risolto questo problema in precedenza facendo $ (window) .bind ("load", function() che permette a tutto di caricare e eseguire il rendering prima di eseguire.) Ma ora questa funzione non funziona nemmeno quando viene usata all'interno di un template. – goldensausage

Problemi correlati