Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/375.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 获取$rootScope事件处理程序上的$scope引用_Javascript_Angularjs_Angularjs Scope - Fatal编程技术网

Javascript 获取$rootScope事件处理程序上的$scope引用

Javascript 获取$rootScope事件处理程序上的$scope引用,javascript,angularjs,angularjs-scope,Javascript,Angularjs,Angularjs Scope,在我的应用程序主模块的.run部分,我有一个$locationChangeStart事件的事件处理程序。我想使用它来确认放弃未保存的更改。问题是我需要引用$scope来执行这些检查 在为$rootScope添加引用时,我尝试添加该引用,但我得到了一个错误未捕获错误:未知提供程序:$scopeProvider您可以向函数注入$scope,如 .run(['$rootScope', '$location', '$scope', function ($rootScope, $location, $s

在我的应用程序主模块的
.run
部分,我有一个
$locationChangeStart
事件的事件处理程序。我想使用它来确认放弃未保存的更改。问题是我需要引用
$scope
来执行这些检查


在为
$rootScope
添加引用时,我尝试添加该引用,但我得到了一个错误
未捕获错误:未知提供程序:$scopeProvider您可以向函数注入$scope,如

 .run(['$rootScope', '$location', '$scope', function ($rootScope, $location, $scope)

您只能将实例(而不是提供程序)注入
run
块。这是我的医生发来的


因此,您将无法注入
$scopeProvider

谢谢您的帮助,但我已经尝试过了。我是在问题中说的。它给出了一个错误:
Uncaught error:Unknown provider:$scopeProvider为什么不在这里使用$rootScope而不是$scope?因为我不想用特定于某些控制器的信息污染
$rootScope
。这只是个人偏好。在任何其他控制器执行之前,运行块就像主方法一样运行。如何注入依赖关系,这是您自己在将来确定的。注入发生在构造时,因此依赖项应该可以被注入。你是说我应该使用$inject?为什么不使用工厂/服务?AdrianMar>他是说你不能这样做(至少像这样)$作用域在run方法上不可用。您不在控制器上,因此您可以访问的唯一作用域是根作用域,并且您不能从根作用域转到子作用域。请查看有关如何处理此问题的一些想法。但是,您可能无法使用广播,因为在执行preventDefault时,您无法等待答复,但其他操作可能会成立。我最终在需要的控制器上设置了
$locationChangeStart
事件处理程序(直接在
$scope
上)。这是一点代码重复,但我可以管理它。谢谢
 .run(['$rootScope', '$location', '$scope', function ($rootScope, $location, $scope)
angular.module('myModule', []).
    run(function(injectables) { // instance-injector
        // This is an example of a run block.
        // You can have as many of these as you want.
        // You can only inject instances (not Providers)
        // into the run blocks
    });