我在控制器中使用“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
我做错了什么?
答案 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 = [])"