angular.copy()在尖括号{{}}内不起作用

时间:2017-02-16 01:08:47

标签: javascript html angularjs

我在控制器中使用“as vm”语法。我使用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

我做错了什么?

2 个答案:

答案 0 :(得分:2)

这个逻辑应该在控制器中完成,这就是控制器的用途。但是要从angular docs on expressions

回答你的问题
  

上下文:针对全局评估JavaScript表达式   窗口。在AngularJS中,表达式是根据范围对象

进行评估的

这意味着它正在尝试在表达式中的angular对象下查找$scope定义。所以要做你想做的事,你必须在控制器中做到这一点:

$scope.angular = angular;

答案 1 :(得分:0)

我的解决方法:创建一个包装函数

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

然后使用ng-init在html中调用它,而不是使用{{}}

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