2017-02-16 64 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 = [])"