Javascript $scope是否从$rootScope继承属性?安格拉斯

Javascript $scope是否从$rootScope继承属性?安格拉斯,javascript,angularjs,Javascript,Angularjs,我有Angular v1.2.8应用程序,其中的文件如下所示: Index.html <div> Menu </div> <div ng-view ></div> <div> Footer </div> 控制器 itemsApp.controller('ItemsController', function($scope, $rootScope, ConfigService) { ... if (!$scop

我有Angular v1.2.8应用程序,其中的文件如下所示:

Index.html

<div> Menu </div>
<div ng-view ></div>
<div> Footer </div>
控制器

itemsApp.controller('ItemsController', function($scope, $rootScope, ConfigService) {
    ...
    if (!$scope.userConfig) {
        $scope.userConfig = ConfigService.getCurrentUserConfig();
        $rootScope.userConfig = $scope.userConfig;
    }

    $scope.$on('$destroy', function () {
        $scope.userConfig = null;
    }
    ...
});
我想为每个登录的用户Joe,Dave加载特定的配置。但我的问题是,当我与另一个用户Dave登录时,我将获得以前登录的用户Joe的联合配置

我不明白,因为当我注销时,会执行destroy回调,其中$scope.userConfig=null;被称为

新用户登录Dave后,我希望$scope.userConfig为null,因此运行$scope.userConfig=ConfigService.getCurrentUserConfig

但是,$scope.userConfig包含以前登录的用户Joe的配置,并且不会检索新配置

当我删除$rootScope.userConfig=$scope.userConfig;突然,它开始像预期的那样工作,为什么

我想将当前用户配置保存到$rootScope中,以便我可以在其他控制器中检索它。

询问是否$scope.userConfig发生以下情况:

查看控制器的$scope以查看它是否具有userConfig对象。在您第一次使用时,它当前没有配置,因此您可以将配置放在$scope上,也可以放在$rootScope上

当在$scope上找不到它时,它会进入$scope链,进入$rootScope查找它

执行此操作时:$scope.userConfig=null;在destory事件中,它只是将null分配给$scope上的userConfig对象,而不是$rootScope本身

下次当您进入控制器并查找$scope.userConfig时,该$scope上的$scope.userConfig实际上为null,但它会上升并在$rootScope上找到它,这就是为什么您要输入if语句,因此您需要在销毁时将其从$rootScope中删除

另外,请考虑是否在这两个作用域上都需要它,我想$rootScope就足够了。

当询问是否需要时$scope.userConfig发生以下情况:

查看控制器的$scope以查看它是否具有userConfig对象。在您第一次使用时,它当前没有配置,因此您可以将配置放在$scope上,也可以放在$rootScope上

当在$scope上找不到它时,它会进入$scope链,进入$rootScope查找它

执行此操作时:$scope.userConfig=null;在destory事件中,它只是将null分配给$scope上的userConfig对象,而不是$rootScope本身

下次当您进入控制器并查找$scope.userConfig时,该$scope上的$scope.userConfig实际上为null,但它会上升并在$rootScope上找到它,这就是为什么您要输入if语句,因此您需要在销毁时将其从$rootScope中删除

另外,请考虑是否在这两个作用域上都需要它,我想$rootScope就足够了。

来源:

每个控制器接收的$scope将有权访问 由层次结构更高层次的控制器定义的属性和方法

所以当你要求的时候$scope.userConfig是从$scope.$parent获取的,它可以是$rootscope,也可以不是$rootscope,这取决于您使用该控制器定位元素的位置。

来自:

每个控制器接收的$scope将有权访问 由层次结构更高层次的控制器定义的属性和方法

所以当你要求的时候$scope.userConfig是从$scope.$parent获取的,它可以是$rootscope,也可以不是$rootscope,这取决于您使用该控制器定位元素的位置

itemsApp.config(['$routeProvider', function($routeProvider) {
    $routeProvider.when('/items', {
        templateUrl: 'views/items/PartialView.html',
        controller: 'ItemsController'
    });

    $routeProvider.when('/login', {
        templateUrl: 'views/authentication/login.html',
        controller: 'LoginController'
    });

    $routeProvider.when('/logout', {
        templateUrl: 'views/authentication/logout.html',
        controller: 'LoginController'
    });
    ...
itemsApp.controller('ItemsController', function($scope, $rootScope, ConfigService) {
    ...
    if (!$scope.userConfig) {
        $scope.userConfig = ConfigService.getCurrentUserConfig();
        $rootScope.userConfig = $scope.userConfig;
    }

    $scope.$on('$destroy', function () {
        $scope.userConfig = null;
    }
    ...
});