2016-06-08 16 views
0

ich ein Modell haben, und es kann eine von zwei Formen annehmen:fügen zusätzliche Logik zwischen Ansicht und Modell in Winkel

{ 
    "x-position" : "center" 
} 

oder

{ 
    "x-position" : 20 
} 

Beachten Sie, wie im ersten Beispiel, x- position ist eine Zeichenkette, während sie in der zweiten eine Ganzzahl ist. Diese Werte sind an eine HTML-Eingabe vom Typ text gebunden. Ich kann keine Eingabe vom Typ "number" verwenden, weil dann ein Fehler auftreten würde, wenn versucht würde, "center" zu interpretieren. Daher muss ich Text verwenden.

Wenn wir bei dem zweiten Beispiel aussehen, wenn der Benutzer den Wert auf 25 ändert sich, da das Eingangs html-Element vom Typ Text ist, ist mein Modell jetzt:

{ 
    "x-position" : "25" 
} 

Das Problem ist die Texteingabe hat änderte nun den Werttyp der x-Position in meinem Modell von einer ganzen Zahl in eine Zeichenkette (20 bis "25"), was unerwünscht ist. Dies liegt daran, dass ich gezwungen bin, den Eingabe-Typ auf "Text" zu setzen, obwohl ich sowohl Text als auch Nummer zulassen möchte, was unmöglich ist. Es würde mir nichts ausmachen, nur die Saite zu akzeptieren, solange ich die Saite irgendwie manipulieren und in eine Zahl umwandeln kann, bevor ich sie an mein Modell zurückgebe.

Ist es mir möglich, eine zusätzliche Logikschicht zwischen der Ansicht und dem Modell hinzuzufügen, so dass, wenn ein Benutzer einen Wert "25px" eingibt, ich dann "px" und dann parseInt ("25 "), dann gebe diesen Wert als Integer in mein Modell ein ... existiert so etwas in Angular?

Ein Ansatz, den ich ausprobiert habe, war, dass ich eine $ -Watch auf X-Koordinate einrichtete und Logik hinzufügte, wenn sich der Wert über Benutzereingabe änderte. Dies funktioniert im kleinen Maßstab für vorhersagbare Daten. Das Problem dabei ist, dass mein Modell dynamisch ist und sich ständig ändert und dass es Hunderte von "x-Positionen" haben könnte, die ich mir ansehen müsste. Das Hinzufügen einer Uhr zu einer so großen Menge an dynamischen Daten scheint mir nicht durchführbar ... außer ich täusche mich.

Dank

Antwort

0

Ich glaube, Sie haben zwei Ansätze hier:

  1. Wenn Sie nur eine Zahl konvertieren müssen, wenn Sie die Daten speichern, dann ist es nur einmal konvertieren, wenn Sie speichern
  2. Wenn Sie es wirklich jedes Mal konvertieren müssen, wenn der Benutzer die Eingabe ändert (obwohl ich keinen Fall sehe, wo es erforderlich wäre), können Sie entweder eine Uhr definieren, wie Sie es bereits getan haben, oder Sie können ng-change oder ng-blur eingeben auf dem Eingang. (was schließlich auch eine Uhr definiert, aber zumindest so haben Sie mehr Kontrolle darüber, was Sie an die Funktion übergeben)
Verwandte Themen