2017-11-10 3 views
0

を入力します変更:は、コンポーネントの入力プロパティを設定し、それは私が文字列の配列を受け取るコンポーネントを持っていますが、内部的に私がfooの配列を持っている必要があります

class Foo { 
     constructor(name: string) { } 
    } 

私はこのようにそれを実行しようとしました。

@Component({ 
     selector: 'my-app-boo', 
     templateUrl: './boo.component.html' 
    }) 
    export class BooComponent implements OnInit { 

     private _columns: Foo[]; 

     @Input() 
     set columns(columns: string[]) { 
      this._columns = columns.map(column => new Foo(column)); 
     } 

     get columns(): Foo[] { 
      return this._columns; 
     } 
    } 

ゲッターとセッターが同じタイプでなければならないので、私はできません。

これをどのようにしてエレガントに行うことができますか?

+0

ゲッターとセッターが同じデータ型 – Aravind

+0

のものでなければならないとして、あなたはこのようにそれを行うことはできませんはい、私は知っている私は、それは私が質問で言うことであり、何がエレガントな解決策になるのだろうかと思います。 – TiagoH

+0

'string'の配列を親コンポーネントの' Foo'配列に変換し、 'Array 'を '@ Input'として' BooComponent'に渡して、次のように設定します: 'set columns(columns:Foo私はこれはあなたの問題のためのエレガントな解決策です –

答えて

0

これは私がそれをやってしまった方法です:

@Component({ 
     selector: 'my-app-boo', 
     templateUrl: './boo.component.html' 
    }) 
    export class BooComponent implements OnInit { 

     private _columns: string[]; 
     private columnOptions: Foo[]; 

     @Input('columns') 
     set columns(columns: string[]) { 
      this._columns = columns; 
      this.columnOptions = columns.map(column => new Foo(column)); 
     } 
    } 
0

これを試してみてください:

class Foo { 
      constructor(name: string) { } 
     } 


@Component({ 
     selector: 'my-app-boo', 
     templateUrl: './boo.component.html' 
    }) 
    export class BooComponent implements OnInit { 

     private _columns: Foo[]; 

     @Input() 
     set columns(columns: Foo[]) { 
      this._columns = columns.map(column => column); 
      } 
     get columns(): Foo[] { 
      return this._columns; 
     } 
    } 
+0

これは役に立ちません_columnsは文字列[] Foo []が必要です。さらに、この場合、getterとsetterも必要なくなり、_columns自体に@inputを置くことができます。 – TiagoH

関連する問題