2016-06-09 5 views
0

Ich render derzeit ein Stück von HTML und Direktiven mit $ sce.trustAsHtml.

Ich habe eine Anweisung namens compile-template benutzt, die mir erlaubt, ng-Direktiven wie ng-click und ng-disabled zu verwenden.

Ich bin in der Lage, Objekte zu übergeben, wenn sie statisch sind (z. B. name: 'winning'), ABER wenn ich mit einer ForEach-Schleife durch sie fahre, erhalte ich ein undefined Ergebnis.

Beispiel:

$scope.xxx = { 
name: "winning", 
array:["test","123","456","888"] 
}; 

var string = 'I am an <code>HTML</code>string with <a href="#" ng-mouseover="removeExp()">links!</a> and other <em>stuff</em> <button ng-click="fire(a)">TEST</button>' 
    angular.forEach($scope.xxx.array, function (a) { 

string += 'I am an <code>HTML</code>string with <a href="#" ng-mouseover="removeExp()">links!</a> and other <em>stuff</em> <button ng-click="fire(a)">TEST</button> <button ng-click="works(xxx.name)">Works</button>' 
    }); 



$scope.myHTML =$sce.trustAsHtml(string); 

ich hier ein Arbeits jsFiddle Beispiel haben: http://jsfiddle.net/3J25M/533/

(^ eröffnen dev Tools console.log^zu sehen)

Beachten Sie, wie die 'Works' Taste funktioniert, aber die 'TEST' Taste nicht. (Die ‚TEST‘ Taste erhält seine Objekteigenschaft aus einer foreach-Schleife.)


Wie kann ich in einem Wert übergeben mit angular.forEach?

Danke!

+1

ersetzen das Problem ist nicht über Looping oder irgendetwas, der Schleifenvariable (a) einfach nicht existiert außerhalb des foreach Rückrufs – aw04

+0

wenn das ist der Fall, wie kann ich einen anderen Array-Wert erhalten, um in jeder Taste zu erscheinen? Wenn ich auf den ersten "TEST" -Button klicke, erscheint Array [0], wenn ich auf den zweiten 'TEST' -Button klicke, erscheint Array [1] ... etc – jward01

+0

Meine Frage ist, wie kann ich jedem Array Werte zuweisen (Array [0], Array [1], Array [2], Array [3]) zu jedem der 4 'TEST' Buttons. Dies kann unter Verwendung einer ng-Wiederholung erreicht werden. Aber ich kann eine ng-Wiederholung in diesem Szenario (mit $ sce) meines Wissens nicht verwenden. Wie kann ich die Werte zuweisen, wenn die For-Schleife außerhalb des Gültigkeitsbereichs liegt? – jward01

Antwort

0

Ändern Sie Ihre Funktion, um auf das Array zuzugreifen, und verwenden Sie den Indexwert von foreach. Dies ermöglicht den Zugriff auf die Bereichsvariable. Beachten Sie den Wert von i und nicht die Zeichenfolge, das ist wichtig.

angular.forEach($scope.xxx.array, function (a, i) { 

    string += 'I am an <code>HTML</code>string with <a href="#" ng-mouseover="removeExp()">links!</a> and other <em>stuff</em> <button ng-click="fire(xxx.array[' + i + '])">TEST</button> <button ng-click="works(xxx.name)">Works</button>' 
}); 

Zum Beispiel wird es erzeugen die folgende:

ng-click="fire(xxx.array[0])" 
+0

großen Dank geschrieben! und ich habe auch etwas gelernt. – jward01

+0

kein Problem, froh zu helfen – aw04

1

Please check working example: Demo

REPLCE Ihre angular.forEach mit Code folgenden

angular.forEach($scope.xxx.array, function(a) { 
    string += 'I am an <code>HTML</code>string with <a href="#" ng-mouseover="removeExp()">links!</a> and other <em>stuff</em> <button ng-click="fire(' + a + ')">TEST</button> <button ng-click="works(xxx.name)">Works</button>' 
}); 

Was ist in Ihrem

falsch ist
<button ng-click="fire(a)">TEST</button> 

Hier müssen Sie „Feuer (a)“ mit

fire(' + a + ') as you are referring variable 
+0

Dies ist ein bisschen anders, da Sie den Wert ausgeben, wie es zu dieser Zeit ist, anstatt eine Referenz auf die Variable. nicht sicher, ob es wichtig ist oder nicht, aber wenn sich der Wert ändert, würde der Klick ein veraltetes Ergebnis erzeugen. – aw04

+0

Entschuldigung, ich habe nicht verstanden, was du zu sagen versuchst. – User2

Verwandte Themen