2016-06-18 18 views
5

Po raz pierwszy używając tutaj angularJS. Zasadniczo skorzystałem z usługi routingu, więc mam połączenie routingowe w szablonie z kodem HTML. Mam również wszystkie te standardowe funkcje javascript, które są wymagane do poprawnego wyświetlania kodu w szablonie (pokazy slajdów i wiele innych rzeczy).Jak używać zwykłego javascript dla kodu wewnątrz ng-view (angularjs)

Po uruchomieniu otrzymuję wszystkie te błędy zerowe (wydaje się, że moje funkcje JS nie mogą znaleźć różnych elementów, ponieważ albo nie mogą uzyskać kodu dostępu w widoku/szablonu, albo zostały uruchomione przed wczytaniem ng-view/template) .

Po wklejeniu wszystkich funkcji javascript w kontrolerze przypisanym do tego szablonu zadziałało. Ale mam wrażenie, że nie powinienem tego robić. Jaki jest właściwy sposób, aby to zadziałało? Dzięki.

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 
}); 

Odpowiedz

3

funkcje Twój jQuery prawdopodobnie nie działają, ponieważ elementy, na których powinny być one wykonywane nie można znaleźć, gdy jesteś na innej trasie.

Ways to naprawić:

  • najczystszym sposobem: Owiń pokaz w kątowym dyrektywy, w którym można zdefiniować swój szablon HTML i jego kod niezbędny. Kod zostanie wykonany dopiero po wywołaniu szablonu. Ponieważ dopiero zaczynasz z Angular, prawdopodobnie potrzebowałbyś dodatkowej pomocy w tym zakresie.
  • Umieść kod w szablonie: Możesz także umieścić swój potrzebny JS w szablonie za pomocą skryptu <> </skrypt>. W ten sposób kod zostanie oceniony tylko po załadowaniu szablonu.
  • Jak już wspomniano, możesz również umieścić swój kod w kontrolerze. Ale będzie to uwędzić kontroler i uczynić swój kod Messy szybko

Opcje 2 & 3 będzie działać, ale również szybko włączyć aplikację do ogromnego bałaganu. Zdecydowanie zalecałbym przekopać więcej na kanciaste dyrektywy, aby zachować swój kod w czystości.

Być może this tutorial może być dobrym punktem wyjścia dla Ciebie.

+0

dzięki za kilka. Będę badał więcej i spróbowałem pierwszego rozwiązania, ponieważ wydaje się ono najbardziej eleganckie. – goldensausage

+0

Udało mi się umieścić cały mój kod javascript w oddzielnych dyrektywach (używając templateUrl do połączenia pliku html zawierającego tylko kod JS). Ale pojawił się kolejny problem. offsetHeight zgłasza nieprawidłowe wysokości niektórych elementów div z tekstem w nich (zgłasza poprawność po ponownym odświeżeniu). Rozwiązałem ten problem przed wykonaniem $ (window) .bind ("load", function(), który pozwala wszystkim na załadowanie i wyrenderowanie przed uruchomieniem, ale teraz ta funkcja nie będzie działała w ogóle, gdy jest używana wewnątrz szablonu. – goldensausage