Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 未调用角度属性装饰器函数_Angular_Typescript - Fatal编程技术网

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我添加了我的存储库和数据源