2016-07-14 17 views
5

ich für eine Funktion suchen, die so etwas wie dies in Angular tun:Angular bewerten Ausdruck, als ob es in der HTML waren

var testValues = { 
    name: 'John Doe', 
    number: 15 
} 
somefunction('Hello, {{name}}, you are {{number}} years old', testValues) 
// returns 'Hello, John Doe, you are 15 years old' 

weiß, dass ich $ eval etwas ähnliches wie dies der Fall ist, aber es kann nicht doppelt haben Klammern in ihm.

+0

Versuchen Sie '$ compile()' ...? – malix

Antwort

3

Sie suchen wahrscheinlich nach dem $interpolate Service.

Beispiel aus der Dokumentation:

var $interpolate = ...; // injected 
var exp = $interpolate('Hello {{name | uppercase}}!'); 
expect(exp({name:'Angular'})).toEqual('Hello ANGULAR!'); 

$interpolate kompiliert eine Zeichenfolge wie in den Vorlagen und gibt eine Funktion, die einen String unter Verwendung des bereitgestellten Kontextes ausgibt.

3

Sie können eine Vorlage manuell kompilieren. Injizieren Sie die $compile Service und übersetzen Sie die Vorlage gegen eine $scope Objekt:

$scope.model = { 
    name: 'tom' 
}; 

$compile('<div>Hello {{model.name}}</div>')($scope); 

Dies wird ein jqLite Objekt zurück, das um ein DOM-Objekt gewickelt wird.

+0

'$ compile' könnte ein bisschen Overkill für eine einfache String-Interpolation IMO sein (wenn das alles ist, was OP benötigt), obwohl es auch funktioniert - es verwendet intern $ interpolate. – plamut

Verwandte Themen