如果我理解正确,您需要的是仅当用户有权编辑页面时才显示一个按钮。
如果您想阻止某种用户访问页面,Guard 很有用。根据您的帖子,所有用户都可以访问该页面。但是,并非所有人都可以编辑该页面。
我想你需要一个resolver,直接从路由发送用户数据。
这就是它的工作原理:
@Injectable({ providedIn: 'root' })
export class MeResolver implements Resolve<any> {
constructor(private http: HttpClient) {}
resolve(
route: ActivatedRouteSnapshot,
state: RouterStateSnapshot
): Observable<any>|Promise<any>|any {
// This should return user data (take care of sending token too)
return this.http.get<any>(`${environment.api}/auth`)
}
}
在您的路由文件中,您必须正确:
{
path: '',
component: UserComponent,
resolve: [ MeResolver ],
}
然后,在您的组件中,您可以使用 route 属性访问解析器,例如:
export class UserComponent {
$me: Observable<any> = this.route.data.pipe(map(elem => elem[0]));
constructor(private route: ActivatedRoute) { }
}
这样,您可以在 HTML 中隐藏“编辑”按钮:
<button (click)="edit()" *ngIf="(me$ | async)?.role.admin">EDIT</button>