Angular 根据条件禁用路由器导航链接

Angular 根据条件禁用路由器导航链接,angular,angular-routing,angular-services,angular-router,angular-route-guards,Angular,Angular Routing,Angular Services,Angular Router,Angular Route Guards,如何根据状态禁用router.navigate或链接 如果状态为“否”,则我无法键入链接以编辑材料 HTML 点击我 .状态是角度分量中的字符串。单击我的语法 Edit:disable属性是一个用于等的HTML5属性。您可以使用一些css使它看起来更好,以获得更好的用户体验,如下所示:按钮:disabled{cursor:not allowed;} 编辑:另一种方式是这样的 onEditMaterial(material_id) { if (this.status === 'No') r

如何根据状态禁用router.navigate或链接

如果状态为“否”,则我无法键入链接以编辑材料

HTML 点击我 .状态是角度分量中的字符串。单击我的语法

Edit:disable属性是一个用于等的HTML5属性。您可以使用一些css使它看起来更好,以获得更好的用户体验,如下所示:按钮:disabled{cursor:not allowed;}

编辑:另一种方式是这样的

onEditMaterial(material_id) {
    if (this.status === 'No') return; // if the status is 'No' don't do anything

    this.router.navigate(['materials', material_id, 'edit']);
  }

要禁用该按钮,您可以按照DrNio提供的答案进行操作。
根据评论中的对话,如果您还想阻止导航,即使在浏览器中更改URL,那么您需要使用路由器防护。请在此处查看AuthGuard的示例:。搜索导出类AuthGuard实现CanActivate。您基本上需要实现canActivate方法。

如果api给出了状态,我的问题是什么?如何声明它?在组件public status:string=中有一个status属性。然后,在执行this.http.get…toPromise.thendata=>{//在此处检查响应的状态,并将状态更改为此。状态=某些值-您可以通过您正在谈论的服务的代码来代替此操作吗?EDITsure..如果mat_status是更改的属性,但为什么如果my mat_status是,则按钮始终处于禁用状态?需要更多信息。从描述中不清楚你想做什么。改进标题的格式并删除不必要的格式可能重复的标题
onEditMaterial(material_id) {
  this.router.navigate(['materials', material_id, 'edit']);
}
onEditMaterial(material_id) {
    if (this.status === 'No') return; // if the status is 'No' don't do anything

    this.router.navigate(['materials', material_id, 'edit']);
  }