2016-07-20 13 views
0

Dies ist wahrscheinlich eine einfache Frage, aber schwer zu suchen ...Auswertung Angular Ausdrücke in Javascript-Strings

ich den Text auf einer Schaltfläche haben auf einer Bedingung basiert Wechsel:

<button>{{buttonText()}}</button> 
<script> 
    $scope.buttonText = function() { 
     if (condition) { 
      return "Here is {{otherVar}}"; 
     } else { 
      return "Nope!"; 
     } 
    } 
</script> 

Natürlich Die Schaltfläche zeigt "Hier ist {{otherVar}}" ohne den Ausdruck otherVar in den Ausdruck zu analysieren. Gibt es eine Möglichkeit, die js-Saite eckig auszuwerten?

Die gesamte Zeichenfolge wird von einem CMS übergeben, so kann ich nicht nur return "Here is" + otherVar; tun Suche nach etwas wie return angularEval("Here is {{otherVar}}");

ich
+2

Wh y kannst du nicht einfach die eigentliche 'otherVar' in die Zeichenkette in JS einfügen, anstatt etwas eckigesEval zu benutzen? –

+1

Sie können Ausdrücke auf diese Weise nicht auswerten; Winkelausdrücke haben nur einen Kontext innerhalb des Controllers, an den sie gebunden sind (ihre spezifische '$ scope' -Instanz). Das Speichern eines Ausdrucks in einer Datenbank ist nicht sinnvoll, da es keine Möglichkeit gibt, zu wissen, dass dieser Ausdruck für denselben Controller mit derselben Variablen ausgewertet wird. – Claies

+0

Ich sehe. Die Zeichenfolge wird in einer Datenbank gespeichert, so dass der Client sie im CMS übersetzen kann: "Hier ist {{otherVar}}" für Englisch und "Hier ist {{OtherVar}}" für Deutsch. – Keith

Antwort

1
<button>{{buttonText()}}</button> 
<script> 
    //controller injects $interpolate like app.controller($scope, $interpolate) 
    $scope.buttonText = function() { 
     if (condition) { 
      var dataObj = { otherVar : 'bla' }; //can be scope 
      var exp = $interpolate('Here is {{otherVar}}'); 
      return exp(dataObj); 
     } else { 
      return "Nope!"; 
     } 
    } 
</script> 

mehr lesen: https://docs.angularjs.org/api/ng/service/ $

auch einfachere Lösung setzen condition und otherVar im Rahmen interpolieren und

<button>{{ condition ? 'Here is ' + otherVar : 'Nope!'}}</button> 
+0

Ich denke, dass meine Lösung in meinem Fall besser ist, aber deine antwortet perfekt auf die allgemeinere Frage. Ich markiere es am besten, obwohl ich es nicht benutzt habe; Hoffentlich wird es anderen helfen. – Keith

+0

Ihre Lösung verwendet einfache JS und könnte auch nur "Hier ist" + andereObj, thx für die Abstimmung btw – bresleveloper

+0

Ja, aber in einigen Übersetzungen andereVar war irgendwo in der Mitte der Zeichenfolge. – Keith

-1

Was Claies Sinn sagte macht: im Kontext nur

Winkel Ausdrücke der Controller, an den sie gebunden sind

VanillaJS zur Rettung!

return "Here is {{otherVar}}".replace('{{otherVar}}',otherVar); 
-1
<script> 
$scope.otherVar = "something else"; 
$scope.buttonText = function (condition) { 
    if (condition) { 
     return "Here is " + $scope.otherVar; 
    } else { 
     return "Nope!"; 
    } 
}; 

+0

Können Sie erklären, wie diese Hilfe (vielleicht nur ein oder zwei Sätze). Nur etwas Code zu werfen wird nicht als eine gute Antwort angesehen. – litelite

Verwandte Themen