角度:两个不同的模块或单个模块

时间:2018-11-28 09:36:28

标签: angular angular-ui-router angular5 angular4-router

我最近开始研究Angular(Angular5)。我的应用程序具有名为Home, School, Office的标签,并且我有两种类型的用户Adminnon-admin。点击Office标签后,“管理”页面将被重定向到“管理”页面,非管理用户将被重定向到“非管理”页面。

那么,为此要求我需要制作两个不同的模块吗?还是我应该制作一个模块并根据用户类型重定向?请用项目结构指导我。

2 个答案:

答案 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;

因此这将解决您的问题,您可以将此服务映射到所需的所有路由,并可以获取用户的角色-我并不反对创建模块,这将是阅读路由中角色的更好方法-检查该链接以获取更多想法-快乐编码:)