2016-03-18 16 views
0

Ich versuche, ein Review-System zu simulieren. Wie übergibt ng submit Werte an den Controller?Werte nicht speichern von ng senden für Textarea

In meinem Controller Ich habe

$scope.reviews = function() { 
 
    $scope.rating = 0; 
 
    $scope.max = 5; 
 
}; 
 
$scope.myTextArea = ''; 
 
$scope.saveReview = function(rating, myTextArea) { 
 
    console.log(rating); 
 
    console.log(myTextArea); 
 
};

Aus meiner Sicht habe ich:

<form name="reviewForm" class="form-horizontal" ng-submit="saveReview(rating, myTextArea)" novalidate> 
 
    <div> 
 
    <rating ng-model="rating" max="max" aria-labelledby="'product.title'"></rating> 
 
    </div> 
 
    <div>This is the rating: {{rating}}</div> 
 
    <div class="animate-switch" ng-switch-when=true> 
 
    <textarea ng-model="myTextArea" class="form-control" placeholder="Write a short review of the product." title="Review"></textarea> 
 
    </div> 
 
    <button type="submit" class="btn btn-primary pull-right">Submit Review</button> 
 
</form>

Wenn ich das Formular abschicken, wird die saveReview Funktion aufgerufen und Ausdruck in der Konsole ist 0 und ''. Daher wird keiner der Werte gespeichert/übergeben. Ng-Modellbewertung zeigt 5 Sterne und wenn Sie auf 4 Sterne klicken, wird {{rating}} angezeigt 4.

Irgendwelche Ideen?

Antwort

0

Übergeben Sie nichts in die saveReview()-Funktion unter ng-submit. Stattdessen lassen Sie die saveReview() die Variablen aus dem Geltungsbereich verwenden. Verkapseln Sie auch die Variablen innerhalb eines Objekts. Zum Beispiel: ng-model="review.rating" und ng-model="review.text". Angenommen, es gibt viele, Sie brauchen eine, um ein Objekt zu sein;)

+0

hmm vielleicht habe ich einige Informationen weggelassen. Ich verwende eine ng-Wiederholung, die Abschnitte von zeigt: product.name auswählbare Sterne spezielle Reviewbox, wenn 2 oder weniger Sterne ausgewählt werden So, wenn ich die Variablen verkapsele, fange ich an, die Sterne durcheinanderzubringen. Der Überprüfungscode lautet wie folgt: $ scope.reviews = function() { $ scope.products = Products.query(); $ scope.review.rating = 0; $ scope.max = 5; }; Ich nenne diese Review-Funktion am Anfang der Seite rendern. –

+0

Encapsulating macht es einfacher, die Daten für andere Operationen zu übergeben, sollte aber nichts beeinflussen. Ich gehe davon aus, dass die submit nur zu einem Zeitpunkt an einem Eintrag arbeitet. Wenn Sie also die Einträge durchlaufen, ist es noch sinnvoller. Lassen Sie einfach die Speicherfunktion keine Argumente und verwenden Sie Variablen aus dem Bereich. Sonst brauche ich mehr Informationen, was das eigentliche Problem ist. – Vaelyr

+0

Danke für die Eingabe und schnelle Antworten. Ich werde mehr daran arbeiten. Ich bin zu eckig sehr neu. Ich würde mich über alle Ressourcen freuen, die Sie empfehlen möchten. –