我在Angular Service中有类级别的变量。我需要通过装饰器为变量值添加一些值。我该如何实现?
{ 'a': 'x' }
{
'a': 'b',
'c': [1,2,99]
}
以上代码应在MicroService.NAME之前添加apiURL。 如果MicroService.NAME的值为'authService',则该值为 的apiURL必须更改为'authService / api / login'。
如果达到上述要求,那么我可以在Http Interceptor中用其URL替换微服务名称。(http://my.ip:port/api/login)
我是新来的装饰工。我在互联网上找不到合适的解决方案。
答案 0 :(得分:1)
import "reflect-metadata";
const enum MicroService {
NAME = "microserviceName/"
}
function Service(prefix: string): PropertyDecorator {
return (target, key): void => {
let original = target[key];
Reflect.deleteProperty(target, key);
Reflect.defineProperty(target, key, {
get: () => original,
set: newVal => {
original = `${prefix}${newVal}`;
},
enumerable: true,
configurable: true
});
};
}
export class MyClass {
@Service(MicroService.NAME)
public foo: string = "hello";
public exec(): string {
return this.foo;
}
}
const c = new MyClass();
console.log(c.foo); // - prints: microserviceName/hello
c.foo = "test";
console.log(c.foo); // - prints: microserviceName/test