Я использую в приложении angular 7 общий модуль для использования директивы в разных других модулях.
import { Directive, OnInit, HostBinding, Input } from '@angular/core';
@Directive({
selector: '[appServerSuccess]'
})
export class ServerSuccessDirective implements OnInit {
@Input() appServerSuccess: string;
@HostBinding()
get innerText() {
return this.appServerSuccess;
}
@HostBinding('class.success')
get success () {
return this.appServerSuccess.toLocaleLowerCase().includes('success');
}
constructor() {}
ngOnInit() {}
}
В shared.module.ts у меня есть декларация и экспорт директивы:
import { NgModule } from "@angular/core";
import { ServerSuccessDirective } from './directives/server-success.directive';
@NgModule({
imports: [ ],
declarations: [ ServerSuccessDirective ],
exports: [ ServerSuccessDirective ]
})
export class SharedModule {}
В каждом из app.module.ts и user.module.ts у меня есть импорт SharedModule.
Директива используется в разных компонентах приложения.
<div [appServerSuccess]="msg"></div>
msg передается через службу как:
private messageSource = new BehaviorSubject('');
currentMessage = this.messageSource.asObservable();
constructor() {
changeMessage(msg: string) {
this.messageSource.next( msg );
}
}
в компонентах в app.module он работает нормально, но в другом компоненте в user.module выдает следующую ошибку:
Невозможно прочитать свойство toLocaleLowerCase из undefined
Это означает, что директива не распознается в user.module.
импорт в модулях, объявление и экспорт в SharedModule верны. Где я ошибаюсь?
Я искал и нашел этот вопрос, который выглядит похожим , но в нем нет решения моей проблемы.
Cannot bind to "appServerSuccess" since it isn't a known property of "div"
). Это означает, что ваша ошибка заключается в том, чтоmsg
не определен в тот конкретный момент, когда осуществляется доступ кsuccess
... - person miselking   schedule 21.02.2019