我有点困惑何时使用@Optional和何时使用?: 对于@Optional
import {Optional} from '@angular/core';
log:string;
constructor(@Optional() private logger:Logger) {
}
对于三元运算符(?:)
export class DataService {
private videos: string[]
getAllMovies(fetchFromService?: boolean): ng.IPromise<any> {
var self = this;
if (fetchFromService) {
return getMoviesFromService();
} else {
return getVideosFromService();
}
}
答案 0 :(得分:1)
它们适用于两种完全不同的情况。
@Optional()
装饰器是用于使用构造函数注入服务的注释。然后将这些服务标记为可选,如果无法解析服务或者在层次结构中找不到提供者,则不会抛出任何异常。
另一方面,三元运算符将方法参数标记为可选。所以你实际上可以省略那些默认为null的参数,如下所示:
getAllMovies(true).then(...)
或
getAllMovies().then(...) // parameter 'fetchFromService' defaults to null