我最近开始研究Angular(Angular5
)。我的应用程序具有名为Home, School, Office
的标签,并且我有两种类型的用户Admin
和non-admin
。点击Office
标签后,“管理”页面将被重定向到“管理”页面,非管理用户将被重定向到“非管理”页面。
那么,为此要求我需要制作两个不同的模块吗?还是我应该制作一个模块并根据用户类型重定向?请用项目结构指导我。
答案 0 :(得分:1)
是的,您需要 2个不同的模块,因为它们都是单独的功能,并且可以在父路由(例如AppRouting或其他)上延迟加载它们。 据说,在您的管理员上,它具有非管理员没有的功能,并且它们在您的应用程序中都具有不同的角色。因此,您应该根据它们的功能将它们分开。
功能模块
为应用程序的每个独立功能创建多个功能模块
帮助您将应用程序划分为重点区域
保留与其他代码分开的与特定功能或特性相关的代码
https://angular.io/guide/feature-modules#feature-modules-vs-root-modules
对于您而言,您的功能模块是 / admin 和 / non-admin (或您在目录中使用的任何术语) 。这些是组件,服务,路由和ngModule。
答案 1 :(得分:1)
模块不会按应用程序的角色进行分离-模块分离是指不需复杂性即可分离代码的过程,如果您有一个component
需要在多个地方使用的情况,则可以将其移动组件添加到shared
模块中,然后将该模块import
放入所有子模块中-如果您要延迟加载模块,则可以延迟加载模块
在您的情况下-这个词对您来说是route
-您可以检查用户在路由时是admin
还是non-admin
,这可以通过使用Resolver
来实现哪个对您有帮助-请检查此link以进行进一步的查询
尝试类似的方法
路由器
{
path: 'pathName',
component: ComponentName,
resolve: { RolePermission: RolePermissionService },
}
RolePermissionService
@Injectable({
providedIn: 'root'
})
export class RolePermissionService implements Resolve<object | string> {
constructor(private router: Router) {
}
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean | string> | Promise<boolean | string> {
return new Promise(resolve => {
return resolve(true);
// Your logic here - Call the service to check whether admin or non-admin
// Bind the data in your route or you can navigate from here
});
}
}
因此返回数据将绑定到路径中的RolePermission
对象,最后您可以在component
中读取它
组件
在您的组件中,您可以像这样读取数据
this._activatedRoute.snapshot.data["RolePermission"].ISSubmitSlotRequest;
因此这将解决您的问题,您可以将此服务映射到所需的所有路由,并可以获取用户的角色-我并不反对创建模块,这将是阅读路由中角色的更好方法-检查该链接以获取更多想法-快乐编码:)