Javascript $scope是否从$rootScope继承属性?安格拉斯
我有Angular v1.2.8应用程序,其中的文件如下所示: Index.htmlJavascript $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
<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;
}
...
});