2016-04-04 11 views
0

Gibt es eine Möglichkeit, Angular zu zwingen, einen Ausdruck mit einer Variablen innerhalb eines Script-Tags zu erkennen? Aus Gründen, die ich nicht kontrollieren kann, muss ich so etwas tun.Angular Templating in Script-Tag

<div ng-app="testApp"> 
    <input type="text" ng-model="testvar" /> 
    <input type="button" onclick="clickFn()" value="Test" /> 
    <script type="text/javascript"> 
    window.clickFn = function() { 
     console.log('{{testvar}}'); 
    } 
    </script> 
</div> 

mit nur einem grundlegenden app Aufruf

var app = angular.module('testApp', []); 

Grundsätzlich möchte ich eine Winkelvariable innerhalb einer Basisfunktion nutzen zu können, die an die App gebunden ist nicht, auch wenn das Skript-Tag, das die Anrufe Funktion ist in der App untergebracht. Ich weiß, das ist nicht die beste Praxis, aber ich denke, es ist die einzige Lösung für mein Problem. Andere Lösungen sind ebenfalls willkommen. Vielen Dank!

Fiddle for playing

+0

Es erwähnenswert wäre, warum Sie diese Einschränkung haben. Wer nennt 'window.clickFn'? Sie können uns nicht bitten, etwas zu tun, von dem Sie wissen, dass es ein schlechtes Muster ist, und keine detaillierte Erklärung geben. Sie können einfach 'window.clickFn = e => console.log ($ scope.testvar)' aus dem Controller-Konstruktor –

+0

@juan die Funktion wird beim Klicken auf die Schaltfläche aufgerufen. Meine Einschränkung ergibt sich aus mehreren Ebenen der Inhaltsautorität. In einem Abschnitt kann ein Autor eine Vorlagenvariable wie {{testvar}} und an einer anderen Stelle den Wert für testvar eingeben. Diese werden mit Java auf die Seite gerendert, was der Grund für das Inline-Skript-Tag ist. – Chad

+0

Bitte erklären Sie es mir nur nicht. Verbessere deine Frage, indem du die Informationen hinzufügst, die ich vorgeschlagen habe. Hast du den Vorschlag, den ich gemacht habe, auch versucht? –

Antwort

0

Wenn wir in die Hölle gehen, warum es nicht in der Art?

<div ng-app="testApp"> 
    <input type="text" ng-model="testvar" /> 
    <input type="button" onclick="clickFn()" value="Test" /> 
    <p id="testvar" style="display:none"> 
    {{testvar}} 
    </p> 
    <script type="text/javascript"> 
    window.clickFn = function() { 
     console.log(document.getElementById("testvar").innerHTML); 
    } 
    </script> 
</div> 

binden, die Variable auf den DOM, und dann in dem textContent oder innerHTML abhängig von Ziel-Browser schamlos lesen.

Hier ist Ihre Geige zurück: https://jsfiddle.net/8kpfu42w/2/

+1

Merkwürdig erinnert an meine jüngste Wiedergabe ... https://jsfiddle.net/1m5uyrof/ – Chad