Ich habe mich gefragt, ob es in Angular eine Möglichkeit gibt, Inhalte bedingt anzuzeigen, außer ng-show usw. Zum Beispiel in backbone.js könnte ich etwas mit Inline-Inhalten in einer Vorlage tun, wie:
<% if (myVar === "two") { %> show this<% } %>
Aber im Winkel beschränke ich mich anscheinend darauf, Dinge in HTML-Tags zu zeigen und zu verstecken
<p ng-hide="true">I'm hidden</p>
<p ng-show="true">I'm shown</p>
Was ist die empfohlene Methode in Angular, um Inline-Inhalte in Angular nur mit {{}} bedingt anzuzeigen und auszublenden, anstatt sie in HTML-Tags zu verpacken?
angularjs
if-statement
ternary-operator
user1469779
quelle
quelle
Antworten:
EDIT: 2Toads Antwort ist genau das, wonach Sie suchen! Stimmen Sie das Ding ab
Wenn Sie Angular <= 1.1.4 verwenden, reicht diese Antwort aus:
Noch eine Antwort darauf. Ich poste eine separate Antwort, da es sich eher um einen "exakten" Lösungsversuch als um eine Liste möglicher Lösungen handelt:
Hier ist ein Filter, der ein "sofortiges Wenn" ausführt (auch bekannt als iif):
und kann wie folgt verwendet werden:
quelle
Angular 1.1.5 hat Unterstützung für ternäre Operatoren hinzugefügt:
quelle
myVar
nur anzeigen lassen, wenn er falsch ist? (dh wie kann ich Variablen im Ausdruck verschachteln?) Ich habe es versucht,{{myVar === "two" ? "it's true" : {{myVar}}}}
aber es funktioniert nicht.myVar
Eigenschaft muss nicht in zusätzliche geschweifte Klammern eingeschlossen werden, sie befindet sich bereits in einem Ausdruck. Versuchen Sie{{myVar === "two" ? "it's true" : myVar}}
Tausende Möglichkeiten, diese Katze zu häuten. Mir ist klar, dass Sie speziell zwischen {{}} fragen, aber für andere, die hierher kommen, lohnt es sich, einige der anderen Optionen aufzuzeigen.
Funktion auf Ihrem $ scope (IMO, dies ist in den meisten Szenarien die beste Wahl):
ng-show und ng-hide natürlich:
ngSwitch
Ein benutzerdefinierter Filter, wie Bertrand vorgeschlagen hat. (Dies ist Ihre beste Wahl, wenn Sie immer wieder das Gleiche tun müssen.)
Oder eine benutzerdefinierte Anweisung:
Persönlich würde ich in den meisten Fällen eine Funktion in meinem Bereich verwenden, die das Markup ziemlich sauber hält und schnell und einfach zu implementieren ist. Es sei denn, Sie werden immer und immer wieder genau das Gleiche tun. In diesem Fall würde ich Bertrands Vorschlag folgen und je nach den Umständen einen Filter oder möglicherweise eine Direktive erstellen.
Wie immer ist das Wichtigste, dass Ihre Lösung einfach zu warten und hoffentlich testbar ist. Und das hängt ganz von Ihrer spezifischen Situation ab.
quelle
Ich verwende Folgendes, um die Klasse attr bedingt festzulegen, wenn ng-class nicht verwendet werden kann (zum Beispiel beim Stylen von SVG):
Der gleiche Ansatz sollte für andere Attributtypen funktionieren.
(Ich denke, Sie müssen auf dem neuesten instabilen Angular sein, um ng-attr- verwenden zu können. Ich bin derzeit auf 1.1.4)
Ich habe einen Artikel über die Arbeit mit AngularJS + SVG veröffentlicht, der über dieses und verwandte Themen spricht. http://www.codeproject.com/Articles/709340/Implementing-a-Flowchart-with-SVG-and-AngularJS
quelle
Zum Überprüfen eines variablen Inhalts und eines Standardtexts können Sie Folgendes verwenden:
quelle
Wenn ich dich gut verstanden habe, denke ich, dass du zwei Möglichkeiten hast, es zu tun.
Erstens könnten Sie ngSwitch ausprobieren und der zweite Weg wäre, einen eigenen Filter zu erstellen . Wahrscheinlich ist ngSwitch der richtige Ansatz, aber wenn Sie Inline-Inhalte nur mit dem {{}} Filter ausblenden oder anzeigen möchten, ist dies der richtige Weg.
Hier ist eine Geige mit einem einfachen Filter als Beispiel.
quelle
Die Angular UI-Bibliothek verfügt über eine integrierte Direktive ui-if für Bedingungen in Vorlagen / Ansichten bis zu Angular UI 1.1.4
Beispiel: Unterstützung in Angular UI bis UI 1.1.4
ng-falls in allen Winkelversionen nach 1.1.4 verfügbar
Wenn Sie Daten in der Array-Variablen haben, wird nur das div angezeigt
quelle
ui-if
wurde zumindest aus der neuesten Version angle-ui entfernt, aber seit Angular 1.1.5 haben Sieng-if
(aus diesem Kommentar )Also mit Angular 1.5.1 (hatte vorhandene App-Abhängigkeit von einigen anderen MEAN-Stack-Abhängigkeiten, warum ich derzeit nicht 1.6.4 verwende)
Das funktioniert bei mir wie das OP-Sprichwort
{{myVar === "two" ? "it's true" : "it's false"}}
quelle
Wenn Sie "Keine" anzeigen möchten, wenn der Wert "0" ist, können Sie Folgendes verwenden:
oder wahr falsch in eckigen js
quelle
Funktioniert auch in exotischen Situationen:
quelle
Ich werde meine in die Mischung werfen:
https://gist.github.com/btm1/6802312
Dies wertet die if-Anweisung einmal aus und fügt keinen Watch-Listener hinzu, ABER Sie können dem Element mit dem set-if-Wert wait-for = "somedata.prop" ein zusätzliches Attribut hinzufügen, das darauf wartet, dass diese Daten oder Eigenschaften zuvor festgelegt werden einmalige Auswertung der if-Anweisung. Dieses zusätzliche Attribut kann sehr praktisch sein, wenn Sie auf Daten aus einer XHR-Anforderung warten.
quelle