2017-02-16 11 views
1

Ich verwende "as vm" -Syntax in einem Controller. Ich benutze angular.copy(), um eine Datenstruktur in eine temporäre zu kopieren.angular.copy() funktioniert nicht in eckigen Klammern {{}}

Allerdings möchte ich diesen Code in die Vorlagenansicht verschieben, so dass ich mich nicht auf einen Controller-Funktionsaufruf verlassen muss. Dies liegt daran, dass ich den Code im Controller nicht neu schreiben muss, wenn ich den Code neu schreibe.

{{vm.temp = []}}       //works 
{{vm.temp = vm.data}}      //works 
{{vm.temp = angular.copy([])}}   //does not work 
{{vm.temp = angular.copy(vm.data)}}  //does not work, I need this or 
{{angular.copy(vm.data, vm.temp = [])}} //does not work, I need this 

Was mache ich falsch?

+0

Sie versuchen, etwas in String-Interpolation zu kopieren, die falsch ist, müssen Sie Ihren vollständigen Code zur Verfügung zu stellen wie das Ereignis der Kopie – Yaser

+0

feuert Warum würden Sie jemals anyth tun müssen so in der Ansicht? Geschäft wie dieses gehört in eine Steuerung – charlietfl

+0

Das Geschäft ist bequem innerhalb angular.copy. Ich möchte angular.copy mit {{}} oder ng-init aufrufen, kann aber nicht. –

Antwort

1

Diese Logik sollte in der Steuerung erfolgen, dafür ist der Controller zuständig. Aber um Ihre Frage zu beantworten, von den angular docs on expressions:

Context: JavaScript expressions are evaluated against the global window. In AngularJS, expressions are evaluated against a scope object

Das bedeutet, es versucht, in Ihrem Ausdruck für die angular Definition unter das $scope Objekt zu suchen. So zu tun, was Sie wollen, würden Sie dies in der Steuerung zu tun haben:

$scope.angular = angular; 
+0

Es spuckt eine lange Fehlermeldung aus: Uncaught Error: [$ rootScope: infdig] http://errors.angularjs.org/1.4.6/$rootScope/infdig?p0=10&p1=%5B%5B%7B%22 [ ...] Sieht aus wie es durch eine ng-Wiederholung weiter unten verursacht wird. Es scheint, dass die angular.copy erfolgreich kopiert wurde. –

0

meine Abhilfe: Erstellen Sie eine Wrapper-Funktion

vm.copy = function (item1, item2) { 
    return angular.copy(item1, item2); 
}; 

dann rufen Sie es in Ihrem html mit ng-init, nicht mit {{}}

ng-init="vm.copy(vm.data, vm.tempData = [])" 
Verwandte Themen