Angular 未调用角度属性装饰器函数
我正在尝试使用此方法创建一个通用表组件。我实现了第一部分,但它似乎不起作用 这是我的装饰师:Angular 未调用角度属性装饰器函数,angular,typescript,Angular,Typescript,我正在尝试使用此方法创建一个通用表组件。我实现了第一部分,但它似乎不起作用 这是我的装饰师: export const tableSymbol = Symbol("table"); export function Column(options: Partial<ColumnModel> = {}) { return function(target: any, propertyKey: string) { if (!target[tableSymbol]) {
export const tableSymbol = Symbol("table");
export function Column(options: Partial<ColumnModel> = {}) {
return function(target: any, propertyKey: string) {
if (!target[tableSymbol]) {
target[tableSymbol] = new TableModel();
}
options.key = options.key || propertyKey;
const columnOptions = new ColumnModel(options);
target[tableSymbol].addColumn(columnOptions);
};
}
和我的组件:
export class TableComponent implements OnInit {
private _data: User[];
private _tableModel: TableModel;
columns: ColumnModel[];
displayedColumns: string[];
@Input() set data(values: any[]) { // Because AsyncPipe is used
if (values) {
this._data = cloneDeep(values);
if (values.length) {
this._tableModel = this._data[0][tableSymbol];
this.buildColumns();
}
}
}
get data(): any[] {
return this._data;
}
private buildColumns() {
this.columns = this._tableModel.columns;
this.displayedColumns = this.columns.map(col => col.key);
}
constructor() { }
ngOnInit(): void { }
}
此处在UserListComponent中使用TableComponent:
export class UserListComponent implements OnInit {
constructor(private repository: UserRepository) {}
ngOnInit(): void {}
getUsers(): User[] {
let repoUsers = this.repository.getUsers();
return repoUsers;
}
}
<common-table [data]="getUsers()"></common-table>
导出类UserListComponent实现OnInit{
构造函数(私有存储库:UserRepository){}
ngOnInit():void{}
getUsers():用户[]{
让repoUsers=this.repository.getUsers();
返回用户;
}
}
存储库如下所示:
export class UserRepository {
private users: User[] = [];
constructor(private dataSource: RestDataSource) {
this.dataSource.getUsers().subscribe(data => {
this.users = <User[]> data;
});
}
getUsers(): User[] {
return this.users;
}
}
const base_url = 'https://jsonplaceholder.typicode.com/';
export class RestDataSource {
constructor(private http: HttpClient) { }
getUsers(): Observable<User[]> {
return this.http.get<User[]>(`${base_url}users`);
}
}
导出类用户存储库{
私人用户:用户[]=[];
构造函数(私有数据源:RestDataSource){
this.dataSource.getUsers().subscribe(数据=>{
这个用户=数据;
});
}
getUsers():用户[]{
将此文件返回给用户;
}
}
RestDataSource是这样的:
export class UserRepository {
private users: User[] = [];
constructor(private dataSource: RestDataSource) {
this.dataSource.getUsers().subscribe(data => {
this.users = <User[]> data;
});
}
getUsers(): User[] {
return this.users;
}
}
const base_url = 'https://jsonplaceholder.typicode.com/';
export class RestDataSource {
constructor(private http: HttpClient) { }
getUsers(): Observable<User[]> {
return this.http.get<User[]>(`${base_url}users`);
}
}
const base\u url='1〕https://jsonplaceholder.typicode.com/';
导出类RestDataSource{
构造函数(私有http:HttpClient){}
getUsers():可观察{
返回这个.http.get(`${base\u url}users`);
}
}
当我运行它时,它说表SYMBOL未定义,这意味着它没有执行列函数。我还上传了我的源代码。谁能告诉我我做错了什么
我正在使用angular V9.1和typescript V3.8,结果发现这是我的数据源中的一个问题。我有一个函数,应该返回一个可观察的Users,但它没有将对象投射给用户。我把它改成了这个,效果很好
export class RestDataSource {
constructor(private http: HttpClient) { }
getUsers(): Observable<User[]> {
return this.http.get(`${base_url}users`)
.pipe(
map((res: JsonArray) => DeserializeArray(res, User))
);
}
}
导出类RestDataSource{
构造函数(私有http:HttpClient){}
getUsers():可观察{
返回此.http.get(`${base\u url}users`)
.烟斗(
map((res:JsonArray)=>反序列化数组(res,用户))
);
}
}
能否显示用户对象的实例化位置和方式?@AaronAdrian我添加了我的存储库和数据源