我在范围内公开$ window.print(),如下所示:
projectsMap.values().stream().reduce((v1, v2) -> Stream.concat(v1.stream(), v2.stream()).collect(Collectors.toList()))
然而,这会导致异常:
angular.js:13642异常消息:非法调用
我需要通过一个单独的函数调用print,这样才能使它工作:
$scope.print = $window.print;
为什么我不能使用第一种选择? 运行Angular 1.5.5
答案 0 :(得分:1)
可以安全地假设每个对象方法都依赖于this
,除非另有证明,因此在将方法指定为另一个对象的方法之前,应将方法绑定到其上下文。
window.print
是原生方法,在Chrome中它只会引发Illegal invocation
而不是抱怨不适当的this
上下文。
而不是包装函数,它可能是
$scope.print = $window.print.bind($window);
或
$scope.print = angular.bind($window, $window.print);