2016-11-01 17 views
1

私は角度2をゆっくりと学習していますが、最近私はカテゴリごとにギャラリーの結果をフィルタリングするカスタムパイプを実装しようとしています。私が読んだすべての記事は、カスタムパイプで実際に起こっていることについては詳細には触れていませんし、自分自身を構築する方法が混乱しています。角2カスタムパイプの説明

私が見ていたチュートリアルのコードが少しありますが、コードは少し古いと思いますが、プリンシパルは同じであると思います。

import {Pipe} from 'angular2/core'; 

@Pipe({ 
    name: 'AgePipe' 
}) 
export class AgePipe { 

    transform(value, args?) { 
    let [minAge] = args; 
    return value.filter(person => { 
     return person.age >= +minAge; 
    }); 
    } 

} 

パイプが実装されているときに値とargsが設定されているとします。私は、値とargの両方に対してTSエラーを取得し続けています。「パラメータの値」に暗黙的に「任意のタイプ」があります。

+0

パイプには暗黙的に左辺の引数 'X | AgePipe'をテンプレートコンパイラの値として使用します。テンプレートコンパイラは、右側のコロンの後ろにあるものを、 'X | AgePipe: '21' ' – silentsod

答えて

2

このtypescriptエラーは、暗黙のanyを禁止するようtypescriptコンパイラを設定したことが原因です。私。変数の型を明示的に指定し、typescriptを使用して暗黙的にその型を推論するのではなく、その型の場合は明示的にany型を指定する必要があります。 TypeScript documentation--noImplicitAnyを参照してください。

Angular2はフィルタパイプを含まないことを選択しました。これは、悪い考えだと思います。このような操作は、ビューで繰り返し実行するにはコストがかかりすぎ、コンポーネントで必要なときにのみ実行する必要があります。

+0

情報ありがとうございます。私はフィルタパイプが速度のために悪い考えであることを読んだ。私のアプリケーションはかなりシンプルで小さいので問題はないと思っていますが、私がしたいことを実装するためのよりよい方法があるかどうかを知りたいと思います。私は4つのカテゴリ(デザイン、Webデザイン、写真、美術)を持っているトップにnavbarを持っています。ホームページのサムネイルの配列にすべてのプロジェクトをリストアップし、ナビゲーションのリンクをクリックして、必要に応じて各カテゴリに配列をフィルタリングできるようにしたいと考えています。フィルタの外側でこれを実装するより良い方法はありますか? – Jleibham

+0

はい。リンクがクリックされたときにコンポーネントのメソッドを呼び出すだけで、コンポーネント内の元の配列をフィルタリングし、コンポーネントのフィールドに保存します。フィルタリングされた配列を視点で繰り返します。 –