Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript angular.copy()在角括号{{}内不起作用_Javascript_Html_Angularjs - Fatal编程技术网

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

Javascript angular.copy()在角括号{{}内不起作用,javascript,html,angularjs,Javascript,Html,Angularjs,我在控制器中使用“as-vm”语法。我使用angular.copy()将一个数据结构复制到临时数据结构中 angular.copy(vm.data, vm.tempData = []) 但是,我希望将此代码移动到模板视图中,这样就不必依赖于控制器函数调用。这是因为当我重写代码时,我也不需要在控制器中重写代码 {{vm.temp = []}} //works {{vm.temp = vm.data}} //

我在控制器中使用“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

我做错了什么?

这个逻辑应该在控制器中完成,这就是控制器的用途。但要回答您的问题,请从以下方面:

上下文:JavaScript表达式根据全局 窗户。在AngularJS中,表达式是根据范围对象计算的

这意味着它试图在表达式中的
$scope
对象下查找
angular
定义。因此,要执行所需操作,必须在控制器中执行以下操作:

$scope.angular = angular;

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

vm.copy = function (item1, item2) {
    return angular.copy(item1, item2);
};
然后在html中使用ng init调用它,而不是使用{{}

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

您试图复制字符串插值中的内容,这是错误的,您需要提供完整的代码,例如哪个事件触发复制为什么您需要在视图中执行类似的操作?像这样的业务属于一个控制者。业务就在angular.copy内。我想用{{}或ng init访问angular.copy,但不能。但是为什么-听起来像是代码的味道。它发出了一条很长的错误消息:未捕获错误:[$rootScope:infdig]看起来像是ng重复引起的。但angular.copy似乎已成功复制。