Angular 8 - директива Autorefresh - PullRequest
       25

Angular 8 - директива Autorefresh

0 голосов
/ 28 сентября 2019

Я использую директиву, чтобы ограничить доступ к определенным меню на основе ролей.Эта часть работает очень хорошо, но я не могу обновить эту директиву, действительно, администратор может выбрать ее для просмотра пользователем, хотя эти права изменяют директиву, она не выполняется повторно.Именно эта функция this.permissionsService.hasPermission будет возвращать другой результат.Как это сделать?

<button mat-button *appHasAccess="['value1-1::value1-2']">Admin</button>

Директива

  ngOnInit(): void {
    this.applyPermission();
  }

  private applyPermission(): void {
    this.permissionsService.hasPermission(this.appHasAccess).then((hasAccess: boolean) => {
      if (hasAccess) {
        this.viewContainer.createEmbeddedView(this.templateRef);
      } else {
        this.viewContainer.clear();
      }
    }).catch(reason => {
      console.error(reason);
      this.viewContainer.clear();
    });
  }

1 Ответ

0 голосов
/ 28 сентября 2019

вы не можете проверить постоянство в ngOnInit - это выполняется только тогда, когда компонент получает сцену, иначе, если у вас есть * ngIf или в компоненте - используйте установщик во входных данных, как

@Input() set appHasAccess(value)
  {
    this.applyPermission(value)
  }
  private applyPermission(appHasAccess): void {
    this.permissionService.hasPermission(appHasAccess).then((hasAccess: boolean) => {
      if (hasAccess) {
        this.viewContainer.createEmbeddedView(this.templateRef);
      } else {
        this.viewContainer.clear();
      }
    }).catch(reason => {
      console.error(reason);
      this.viewContainer.clear();
    });
  }

ПРИМЕЧАНИЕ. Я не сохраняю результат ввода в this.appHasAccess, поскольку в рабочем примере он не требуется в stackblitz

...