在角度范围上公开$ window.print时出现异常

时间:2016-09-22 12:58:05

标签: angularjs angularjs-scope

我在范围内公开$ 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

1 个答案:

答案 0 :(得分:1)

可以安全地假设每个对象方法都依赖于this,除非另有证明,因此在将方法指定为另一个对象的方法之前,应将方法绑定到其上下文。

window.print是原生方法,在Chrome中它只会引发Illegal invocation而不是抱怨不适当的this上下文。

而不是包装函数,它可能是

$scope.print = $window.print.bind($window);

$scope.print = angular.bind($window, $window.print);