2016-07-11 10 views
0

Unter der Annahme, dass ich einen Ausdruck ähnlichen String in meiner Reichweite habeKonvertieren ein Express-like String in einen Ausdruck in Schrägansicht

$scope.expressionString = 'model.key == "anything"'

ich im Hinblick auf diese Zeichenfolge als Ausdruck verwendet werden soll, kann ich TU das?

Im Hinblick werde ich so etwas wie

<div ng-if="expressionString"></div> haben aber natürlich expressionString sollte stattdessen etwas anderes sein.

Ich schätze jede Hilfe. Prost!

+0

Ist das nicht ' 'model.key' zuordnen == "alles" immer "falsch"? – Phil

+1

Ich denke, Sie möchten etwas wie folgt tun: '$ scope.expressionString = 'model.key';' und in Ihrer Sicht: '

...
' – developer033

+2

Können Sie weitere Erklärungen zur Verfügung stellen? Wenn Ihr AusdruckString im wahrsten Sinne des Wortes ein String und kein Boolescher Wert ist, wird er in der ng als wahr gewertet - wenn er einfach existiert, weil er existiert – ceckenrode

Antwort

2

können Sie $eval verwenden Ihren Ausdruck zu bewerten Es gibt zwei Möglichkeiten, es in Ihrem Fall zu tun

Lösung 1

<div ng-if="$eval(expressionString)"></div> 

Lösung 2

In der Steuerung speichert den ausgewertete Wert des Ausdrucks wie unten

$scope.expressionString = $scope.$eval('model.key == "anything"') 

und dann in der Ansicht es einfach ohne $ zu verwenden verwenden Eval in der Ansicht

<div ng-if="expressionString"></div> 
+0

Danke für Ihre Antwort, wir wollen nichts in der Steuerung machen, weil die Zeichenkette aus der Datenbank gezogen wird und manchmal existiert sie, manchmal nicht. Haben Sie eine Meinung zu dieser Antwort: http: // stackoverflow.com/a/38299131/1974153 –

+0

Also verwenden Sie die erste Lösung, wo Sie nichts in der Steuerung tun müssen ... –

+0

Ich sehe, vielen Dank für die Erklärung. Ich dachte, um $ eval oder $ parse zu verwenden, müssen Sie sie irgendwie in Sicht bringen (zum Beispiel durch Controller), aber ich lag falsch. Wird deine Antwort akzeptieren. –

0

Sie können globale Variablen (oder Funktionen) in Angular-Ausdrücken nicht verwenden. Winkelausdrücke sind nur Attribute, ebenso Zeichenketten und kein Javascript-Code.

Please see this stackoverflow answer once

Obwohl, können Sie erreichen, ist es eine Funktion anstelle einer Variable:

$scope.expressionString = function(toCompare) { 
    return $scope.model.key == toCompare; 
    } 

und in der Ansicht:

<div ng-if="expressionString('anything')"></div> 
+0

Vielen Dank für Ihre Antwort. Aber das Problem ist, die Zeichenfolge wird aus der Datenbank gezogen. Und wir wollen es nicht in unserem Controller verarbeiten. –

+0

Wie wird die Schnur gezogen? 'JSP'? Ich habe meine Antwort entsprechend geändert. Sehen Sie, ob es funktioniert –

0

ich die Antwort gefunden, einen parse Filter die Zeichenfolge zu analysieren und einen Umfang

angular.module('zehitomo') 
.filter('parse', function ($parse) { 
    return function (expression, scope) { 
    return $parse(expression)(scope); 
    }; 
}); 

Und angesichts

ng-if="expressionString | parse:this"

+0

Warum einen zusätzlichen Filter dafür erstellen ... und Sie verwenden $ parse nur in diesem Filter..angular hat Ihnen bereits eine Funktion auf der Bereichsebene gegeben, um dieselbe Sache zu erreichen, die auch $ parse nur intern..dann verwendet warum, um einen eigenen zu erstellen. –

+0

Wenn Sie die Definition von $ eval sehen, werden Sie feststellen, dass nur $ parse verwendet wird. –