Ich benutze ASP.NET MVC mit AngularJS 1.6.5.AngularJS 1.6.5 Wie verhindert man die Ausführung eines Winkelausdrucks im 'Wert' des Eingabefelds
In einer Rasierklinge Ansicht, habe ich folgenden Eingang:
<input id="live-search-input"
class="live-search__input"
type="search"
name="search"
autocomplete="off"
ng-model="searchTerm"
ng-model-options="{debounce: 500}"
ng-click="resultsClick($event)"
value="@Model.Search"
/>
Der Wert Model.Search vom Back-End kommt, und stellt die Benutzereingabe. ASP.NET MVC kümmert sich um eine Reihe von Standard-Kodierung/Bereinigung, so dass ich zum Beispiel nicht nach HTML-Tags suchen konnte. Ich habe jedoch keine serverseitige Validierung, um nach etwas zu suchen, das ein Angular-Ausdruck ist (dh ein Ausdruck umgeben von {{doppelt geschweiften Klammern}})
Also, wenn ich nach {{1 + 2} gesucht habe }, würde das obige Eingabefeld den Ausdruck auf "3" auswerten, und das Eingabefeld zeigt an, dass ich nach "3" gesucht habe und nicht nach dem, was ich tatsächlich gesucht habe:
Angular bietet die ngNonBindable directive, die im Wesentlichen Angular erklärt, den Inhalt des Elements nicht zu kompilieren. Das hilft mir jedoch nicht, das Wert-Attribut meines Eingabefeldes nicht bindbar zu machen. Muss ich diese Input-Server-Seite bereinigen (indem ich meinen eigenen Desinfektor für eckige Ausdrücke implementiere), oder gibt es einen "eckigen" Weg, dies zu tun, ähnlich der Verwendung von ngNonBindable?
Wenn Model.Search "{{1 + 2}}" ist, wird ngValue weiterhin als Winkelausdruck ausgewertet. Ich schätze den Kommentar, aber ich verstehe nicht, wie es die ursprüngliche Frage löst. – lcaaroe
@Icaaroe Ich entschuldige mich, ich habe den Punkt ein wenig missverstanden, Sie suchten eigentlich nach dem 'ngModel' mit der Auswertung des interpolierten Ausdrucks des' value' Attributes. Ich habe meine Antwort mit einem anderen Ansatz aktualisiert. –
Ich versuche tatsächlich, den Ausdruck im Wertattribut zu vermeiden. – lcaaroe