2016-07-03 7 views
0

Ich möchte Ziel und Element, die in eckigen, aber ohne jQuery geklickt wird.Dieses Schlüsselwort in angular js zeigt Typ Fehler

$scope.hide = function() { 
    this.querySelector('ul').style.display = 'none' 
}; 

Aber ich bin immer diese Fehlermeldung:

TypeError: this.querySelector is not a function.

ich Angular bin hier. Mache ich etwas falsch?

+0

Nur etwa ein Duplikat von [ "Wie funktioniert die‚this‘Schlüsselwort Arbeit?"] (Http://stackoverflow.com/questions/3127429/how-does-the-this-keyword-work) – Jeroen

+0

'querySelector' ist eine Eigenschaft von' document'. Wenn Sie HTML-Änderungen auf der Ebene von Dokumenten vornehmen, denken Sie wahrscheinlich fälschlicherweise über Ihre Anwendungslogik nach. Sie sollten stattdessen "ng-show", "ng-if" oder ähnliches verwenden. siehe http://stackoverflow.com/questions/14994391/thinking-in-angularjs-ifi-i-have-a-jquery-background/15012542#15012542 für weitere Beispiele, wie man in eckig denkt. – Claies

Antwort

1

Die this innerhalb dieser Funktion bezieht sich nicht auf das Objekt, auf das sie sich bezieht (versuchen Sie, es zu debuggen und/oder zu protokollieren). Ich schlage vor, lesen Sie how the this keyword works in Javascript.

Stattdessen möchten Sie nur document.querySelector tun.

Auf jeden Fall verwendet die "Winkelweise" zum Anzeigen/Verbergen von Dingen eine Direktive wie ngShow. Z.B .:

$scope.isVisible = true; 
$scope.hide = function() { $scope.isVisible = false; }; 
<div ng-show="isVisible">...</div> 
1

Das this Schlüsselwort eine Referenz auf ein Objekt ist. Hier haben Sie kein Objekt, also keinen Bezugspunkt. Deshalb sagt es Abfrage-Selektor ist keine Funktion, weil Ihre this nicht definiert ist. Ändern Sie this mit document.

0
$scope.hide = function() { 
    document.querySelector('ul').style.display = 'none' 
}; 
+0

Es wäre hilfreich, einen Kommentar hinzuzufügen, warum dies die Antwort ist. Es hilft dem Fragesteller und den zukünftigen Lesern, zu lernen und zu verstehen. – Jonathon