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

Get $scope reference on $rootScope event handler

本文关键字:scope 引用 事件处理 rootScope 获取 程序      更新时间:2023-09-26

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

当我为$rootScope添加引用时,我尝试添加该引用,但我得到了一个错误Uncaught Error: Unknown provider: $scopeProvider <- $scope

我该如何处理?我对其他选择持开放态度。

.run(['$rootScope', '$location', function ($rootScope, $location) {
    $rootScope.$on("$locationChangeStart", function (event, next, current) {
        if ($scope.unsavedChanges && !confirm('Unsaved changes') {
            event.preventDefault();
        }
    });
 }

您只能将实例(而不是提供程序)注入到run块中。这来自模块的文档。

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
    });

因此,您将无法注入$scopeProvider

您可以将$scope注入到您的函数中,如;

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