2017-10-18 7 views
0

Angular-cliプロジェクトでは、このコードを検索フィルタ付きのデータテーブル用に実装しました。私はloadshを使用して、次のリンクにあるチュートリアルを使用しました。ここで http://plnkr.co/edit/grhag1P85teN4ftggkms?p=previewanguar 2 anger2-datatableの検索フィルタクエリ - 'first_name'プロパティがタイプ '{}'に存在しません

パッケージのリンクです:https://github.com/mariuszfoltak/angular2-datatable

私は検索フィルタを追加すると、それはにupdateData機能に私は、このエラーを示しました。 プロパティ 'first_name'は型 '{}'に存在しません。 typescriptやloadshのバージョンなどで問題はありますか?ここで

export class UsersComponent implements OnInit { 

    public users: any = []; 
    public filteredData: any; 
    public filterQuery = ""; 
    public rowsOnPage = 10; 
    public sortBy = "first_name"; 
    public sortOrder = "asc"; 

    ngOnInit() { 
     this.authService.getUsersList(userData).subscribe(data => { 
      var res = data.response; 
      this.users = this.users; 
      this.filteredData = res.data; 
     }); 
    } 

    public updateData(query:string) { 
     if(query) { 
      this.filteredData = _.filter(this.users, (a)=>a.first_name.indexOf(query)>=0); 
     } else { 
      this.filteredData = this.users; 
     } 
    } 
} 

がloadshバージョン

"dependencies": { 
    "angular2-datatable": "^0.6.0", 
    "lodash": "^4.17.4", 
}, 
"devDependencies": { 

    "@types/lodash": "^4.14.50", 
    "typescript": "~2.0.3" 
} 
+0

使用します。 'a ['first_name']'を使ってみてください。 –

答えて

1

と私のpackage.jsonファイルである私は、このエラーはあなたのIDEで発生したと思います(それはtypescriptですエラーです)ので、あなたのusers配列がanyを入力したことをすべてについてですとtypescriptは、lodashが{}として返すと推測している型のfirst_nameプロパティを検出できません。指定された型の配列がないため、usersです。データを表すために常にクラスを作成することがベストプラクティスです。次のようなものがあります。

export class User { 
    public first_name: string; 
    /* And the rest of data which coming from your db */ 
} 

/* in your component */ 
public users: Array<User> = []; 

定義クラスは、コードをきれいに整理し整理するのに役立ちます。クラスを作成したくない場合は、asの構文を使用し、それを()のようにラップしてください。

this.filteredData = _.filter(this.users, (a)=>(a as any).first_name.indexOf(query)>=0); 

P.Sあなたはタイプを使用する場合は任意の、それは、配列だけで推測any[]またはArray<any>

+0

あなたの提案をありがとう。私は毎日新しいものを学ばなければならないと思う:) – parth

関連する問題