在Angular 6及更高版本中,@optional装饰器已经被废弃,取而代之的是使用@optional()装饰器函数。如果你想避免使用@optional装饰器,可以使用以下解决方法。
import { Optional } from '@angular/core';
@Directive({
selector: '[myDirective]'
})
export class MyDirective {
constructor(@Optional() private myService: MyService) { }
}
import { Optional } from '@angular/core';
@Component({
selector: 'my-component',
template: '...'
})
export class MyComponent {
constructor(@Optional() private myService: MyService) { }
}
这样,在注入时,如果没有提供该依赖项,它将被设置为null而不是抛出错误。你可以在使用时检查该依赖项是否为null,以处理它不存在的情况。
ngOnInit() {
if (this.myService) {
// 处理依赖项存在的情况
} else {
// 处理依赖项不存在的情况
}
}
这样,你就可以避免使用@optional装饰器,并且可以处理依赖项不存在的情况。