【发布时间】:2018-01-20 07:40:18
【问题描述】:
我想装饰我的班级
@params({
url: '/books'
})
@Injectable()
export class BooksResource {
constructor(@Inject(HttpClient) protected http: HttpClient) {}
get() {
return this.http.get(this.url)
}
}
通过自定义 @params 装饰器
function params(options) {
return (target) {
const original = target;
function construct(constructor, args) {
const c: any = function () {
return constructor.apply(this, args);
};
c.prototype = constructor.prototype;
return new c();
}
const newConstructor: any = function (...args) {
const instance = construct(original, args);
instance.url = options.url;
return instance;
};
newConstructor.prototype = target.prototype;
return newConstructor;
}
}
我用自定义构造函数尝试了一百万种变体,但它们不适用于注入的参数
原始构造函数很好用
function params(options) {
return (target) {
return target
}
}
如何解决? 游乐场:https://embed.plnkr.co/opnY3y/
【问题讨论】:
-
你想做什么?你想给目标类添加属性吗?
-
是的。一般来说,当参数被合并时,我想用参数装饰器扩展类。例如:@params({ withCredentials: true }) class Resource {} @params({ url: '/books' }) class BookResource extends Resource {}
标签: angular typescript dependency-injection decorator