2016-04-16 25 views
2

Ich habe eine Komponente, die eine Zeichenfolge als Input-Parameter akzeptieren. Der String lokalisiert werden soll, so binde ich diese Zeichenfolge ist auf diese Weise:Binding Best Practice

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

Auf diese Weise alles perfekt funktioniert, aber ich legte eine Bruchstelle in die getSectionName Funktion, und ich bemerkte, dass diese Funktion genannt wird viel von Zeiten. Am Start wird 5-6 mal aufgerufen, und dann jedesmal wenn ich etwas in der App mache wird es wieder aufgerufen.

Ist das ein korrektes Verhalten oder ist es gefährlich für die Leistungen?

Vielen Dank

EDIT das Rohr:

@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 Eine sehr gute Erklärung über Rohre here gefunden werden kann.

Antwort

1

Die Verwendung von Funktionen zum Binden von Ausdrücken wird aufgrund der von Ihnen erwähnten Auswirkungen auf die Leistung abgeraten.

Bevorzugen Sie Funktionsergebnisse an Felder und binden Sie stattdessen an diese Felder.

In Ihrem konkreten Beispiel wäre eine Rohrleitung wahrscheinlich die geeignete Lösung.

+0

Aber selbst wenn "Ausdruck" ODER "Variablenreferenz" vorhanden ist, wird dieser Ausdruck ausgewertet, wenn CD läuft. also, wie Leistung ist wichtig? Entschuldigung, wenn ich etwas verpasst habe. –

+1

Vergleichen der Identität von zwei Werten ist billig, Aufruf von Funktionen ist im Vergleich teuer (nichts im Vergleich zu zum Beispiel eine HTTP-Anfrage), aber es kann zusammenfassen, wenn Sie viele Bindungen haben. –

+0

Mit einer Pipe wird es immer noch oft aufgerufen. An dieser Stelle denke ich, dass dies das normale Verhalten von Angular2 ist. – user3471528