“Angular9”中没有“$rootScope”。可以使用什么?
在“Angular9”中没有“$rootScope”。可以使用什么?,angular9,Angular9,在AngularJS中,我使用$rootScope传递用户数据,例如: $ rootScope.user = { id: '4', username: 'user' ... }; $ rootScope.user.authenticated = false; 每次使用对SQL的查询打开或更新页面时,都会填充$rootScope中的数据 在Angular 9中,我没有找到$rootScope的用法。 告诉我,这些数据可以存储在Angular 9中的什么位置?在Angular中,如果您需要类似的内
AngularJS
中,我使用$rootScope
传递用户数据,例如:
$ rootScope.user = {
id: '4',
username: 'user'
...
};
$ rootScope.user.authenticated = false;
每次使用对SQL
的查询打开或更新页面时,都会填充$rootScope
中的数据
在Angular 9
中,我没有找到$rootScope
的用法。
告诉我,这些数据可以存储在
Angular 9
中的什么位置?在Angular中,如果您需要类似的内容,您可以创建一个服务,在root中提供,并在任何需要的地方注入它。例如:
$ rootScope.user = {
id: '4',
username: 'user'
...
};
$ rootScope.user.authenticated = false;
服务:
//创建服务(providedIn:'root')使其全局可用
@可注射({providedIn:'root'})
导出类用户服务{
用户:有吗={
id:'4',
用户名:“用户”
...
};
}
在组件中使用服务:
@组件({…})
导出类MyComponent实现OnInit{
_未验证:布尔值;
//注入服务
构造函数(私有_userService:userService){}
恩戈尼尼特(){
//使用服务
此.\u isAuthenticated=\u useService.user?.authenticated??false;
}
}
PS:上面的代码使用了两种(在我写这个答案时是新的):可选链接和空合并。您始终可以使用常规三元运算符,而不是:
this.\u isAuthenticated=\u useService.user_useService.user?.authenticated:false
当我和我的团队将其中一个项目从AngularJS迁移到AngularJS时,我查看了$rootScope在旧应用程序中的使用时间,结果发现它95%的时间用于身份验证。其他一些用例涉及微调器、与浏览器相关的设置和边缘情况
看起来您的用例也与我们的相似。我刚刚将$rootScope.user折叠到一个名为identity的现有AngularJS服务中(或者它可以是auth,或者其他)。因此,在每个引用$rootScope.user的组件中,我将其替换为以下内容。构造函数只是依赖注入,允许您在任何地方使用identity服务中的变量
不管怎样
currentUser = this.identity.currentUser
constructor(private identity: IdentityService) {}
标识服务如下所示。当前用户有一个getter函数,当它不可用时,可以查看cookie,否则,它是一个空白对象(未经验证)
identity.service.ts
private _currentUser; //should only obtain currentUser via get currentuser()
constructor(private cookieService: CookieService) {}
get currentUser() {
if (!this._currentUser) {
this._currentUser = this.getUserFromCookie() || {}; //get from cookie
}
return this._currentUser;
}
getUserFromCookie() {
return this.cookieService.get('currentUser') ? JSON.parse(this.cookieService.get('currentUser')) : {};
}
希望这能让你开始并帮助他人。谢谢。告诉我,如何使其全局化,而不是针对特定组件?它是全局的,但具有角度样式。我的意思是,在root中提供的服务是一种全局性的方式,您可以在任何需要的地方注入它们。这种方法是否有任何特定的场景不适合您的设计?到目前为止,您只对这种可能性感兴趣。事实上,您可以提供的不仅仅是服务。您还可以提供值,只要为其构建标记即可。你可以阅读更多关于它的内容