2017-02-16 88 views
1

我在控制器中使用「as vm」語法。我使用angular.copy()將一個數據結構複製到臨時數據結構中。angular.copy()在尖括號{}內不起作用

angular.copy(vm.data, vm.tempData = []) 

但是,我想將此代碼移入模板視圖,因此我不必依賴控制器函數調用。這是因爲當我重寫代碼時,我不需要重寫控制器中的代碼。

{{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 

我在做什麼錯?

+0

您正在試圖複製串插這是錯誤的東西里面,你需要像哪個事件爲什麼你需要做的任何物品複製 – Yaser

+0

提供您完整的代碼在視圖中這樣做?像這樣的業務屬於控制器 – charlietfl

+0

這個業務在angular.copy中很方便。我想用{{}}或ng-init訪問angular.copy,但不能。 –

回答

1

這個邏輯應該在控制器中完成,這就是控制器的用途。但是,爲了回答你的問題,從angular docs on expressions

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

這意味着它試圖尋找在你的表達$scope對象下angular定義。所以,做你想要什麼,你就必須做到這一點的控制器:

$scope.angular = angular; 
+0

它吐出一個長的錯誤信息:未捕獲的錯誤:[$ rootScope:infdig] http://errors.angularjs.org/1.4.6/$rootScope/infdig?p0=10&p1=%5B%5B%7B%22 [ ...] 看起來像是由ng-repeat引起的。看起來angular.copy成功複製了。 –

0

我的解決方法:創建一個包裝功能

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

然後用NG-INIT叫它HTML中,不與{{}}

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