Javascript angular.copy()在角括号{{}内不起作用
我在控制器中使用“as-vm”语法。我使用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}} //
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似乎已成功复制。