我正在开发Angular2项目,我需要在其中生成动态函数,该函数将能够调用服务类下提供的服务。服务类有以下10个get函数。
例如:
我的服务类
import { Injectable } from '@angular/core';
@Injectable()
export class service {
constructor() { }
get function1(){
return 1;
}
get function2(){
return 2;
}
get function2(){
return 3;
}
}
我正在尝试创建一个函数,该函数将参数作为函数名称并返回相应的答案。
例如:
我的app.component.ts
import { Component} from '@angular/core';
import {service} from "./service";
@Component({
selector: 'app',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css'],
providers : [service]
})
export class AppComponent(){
constructor(private _service:service){}
let one = getVal(function1); /// This should return 1
let two = getVal(function2); /// this should return 2
getVal(val){
return this._service.val; // but i am getting error val not exist on type service
}
}
他们是否有任何解决方案,因为它可以帮助我减少代码和性能。
提前致谢
答案 0 :(得分:1)
有点难以说出你在问什么,但这可能有所帮助。
class MyService {
get function1() {
return 1;
}
get function2() {
return 2;
}
get function3() {
return 3;
}
}
const service = new MyService();
const getValFactory = service => name => service[name];
const getVal = getValFactory(service);
// Use strings, not unquoted function names.
console.log(getVal('function1'));
console.log(getVal('function2'));
console.log(getVal('function3'));
答案 1 :(得分:1)
function1
等不只是'获取函数' - 它们是属性访问器方法。
相反,它可能应该是
let one = getVal('function1');
和
getVal(val){
return this._service[val];
}
答案 2 :(得分:1)
您可以使用"任何"绕过TypeScript强类型检查。
return(this.service as any)[val]
class Service {
constructor() {}
get function1() {
return 1;
}
get function2() {
return 2;
}
get function3() {
return 3;
}
}
class AppComponent {
constructor(private service: Service) {}
getVal(val: string) {
return (this.service as any)[val];
}
}
const service = new Service();
const app = new AppComponent(service);
console.log(app.getVal("function1"));
console.log(app.getVal("function2"));
console.log(app.getVal("function3"));