2016-04-16 7 views
2

文字列を入力パラメータとして受け入れるコンポーネントがあります。 文字列は、私はその文字列をバインドするので、ローカライズされなければならないが、この方法です:すべてが完璧に動作します。このようにバインディングのベストプラクティス

<drawer-item [text]="getSectionName (Routes.Companies)" >... 

が、私はgetSectionName関数にブレークポイントを入れて、私はこの機能がと呼ばれていることに気づきましたたくさん回。 起動時に5〜6回呼び出され、私はアプリで何かするたびに再び呼び出されます。

これは正しい動作ですか、それともパフォーマンスに危険ですか?

どうもありがとう

EDIT パイプ:パイプについては非常に良い説明がhereを見つけることができます

@Pipe({ 
    name: 'route', 
    pure: false 
}) 
export class RoutePipe implements PipeTransform { 
    static i:number = 0; 
    transform(route: Route) { 
     switch (route.state) { 
      case Routes.StartPage.state: 
      console.log (RoutePipe.i++); 
       return "H"; 
      case Routes.Companies.state: 
       return "G"; 
      case Routes.Settings.state: 
       return "F"; 
      case Routes.Users.state: 
       return "E"; 
      case Routes.CoursesSources.state: 
       return "D"; 
      case Routes.DocumentSources.state: 
       return "C"; 
      case Routes.Notifications.state: 
       return "B"; 
      case Routes.NonDocumentalExpirations.state: 
       return "A"; 
      default: 
       break; 
     } 
    } 
} 

EDIT。

答えて

1

バインディング式で関数を使用することは、パフォーマンス上の影響があるためにお勧めしません。

関数の結果をフィールドにアサインし、代わりにこのフィールドにバインドすることをお勧めします。

具体的な例では、パイプがおそらく適切な解決策になります。

+0

しかし、「式」または「変数参照」があっても、その式はCDの実行時に評価されます。どのようにパフォーマンスが重要になるのでしょうか?私が何かを見逃してしまった場合。 –

+1

2つの値の同一性を比較するのは安価ですが、呼び出し関数は高価です(HTTPリクエストと比較して何もありません)。 –

+0

パイプを使用すると、まだ多くの時間が呼ばれています。この時点で、これはAngular2の正常な動作だと思います。 – user3471528