2013-10-11 5 views
29

Ich bin neu in AngularJS und ich habe ein Problem, das ich habe Probleme zu lösen, gab es eine ähnliche Frage auf Stackoverflow, aber es schien nicht zu mir aus. Ich habe grundsätzlich ein Formular, das mit ng-click aktualisiert wird, aber sobald ich Text in eines der Textfelder eingegeben habe, werden diese Textfelder nicht mehr aktualisiert.ng-model nicht mehr aktualisiert nach der Eingabe in Texteingabe

Das ist mein HTML

Edit Course: 
<li ng-repeat="course in courses"> 
    <p> 
    <a ng-click="Edit_Course(course.id)">{{course.course_name}}</a> 
    </p> 
</li> 
<div ng-show="showedit == 1"> 
    <form novalidate ng-submit="edit_course()" class="simple-form"> 
    <label for="form_course_name">Course</label> 
     <input type="text" id="form_course_name" ng-model="edit_course_name"> 
    <label for="form_par">Par</label> 
     <input type="text" id="form_par" ng-model="edit_course_par"> 
    <label for="form_course_location">Course Location</label> 
     <input type="text" id="form_course_location" ng-model="edit_course_location"> 
    <input type="submit" id="submit" value="Edit Course" /> 
    </form> 
</div> 



Dies ist meine Funktion, die jemand aufgerufen wird, wenn auf einen Link klickt

$scope.Edit_Course = function (id) { 
    var course = { 
     'course_id' : id 
    }; 

    $http({method: "POST", url: "http://www.dgcharts.com/editcourse", data: course}) 
    .success(function(data, status, headers, config){ 

     thecourse = data["course"]; 
     $scope.edit_course_name = thecourse.course_name; 
     $scope.edit_course_par = thecourse.par; 
     $scope.edit_course_location = thecourse.course_location; 
     $scope.edit_course_id = thecourse.id; 
     $scope.showedit = 1; 
    }) 
} 

Antwort

115

Ihr Link eine Anmeldung erforderlich ist.

Wenn ich über Ihr Problem raten muss, hängt es möglicherweise mit dem Winkelbereich zusammen. Versuchen Sie stattdessen, die ng-Modellbindung an eine Objekteigenschaft zu ändern. so in Ihrem HTML, statt:

<input type="text" id="form_course_name" ng-model="edit_course_name"> 

tun dies

<input type="text" id="form_course_name" ng-model="course.edit_course_name"> 

und in Ihrem Javascript, auf dem Ajax-Rückruf, ändern Sie es zu:

$scope.course = {}; //only do this if $scope.course has not already been declared 
$scope.course.edit_course_name = thecourse.course_name; 

für weitere Informationen zu diesem Thema Ausgabe, siehe: https://github.com/angular/angular.js/wiki/Understanding-Scopes

+5

Vielen Dank, dass es in etwa 60 Sekunden behoben. Ich werde definitiv über Scopes nachlesen, bevor ich mit diesem Projekt fortfahre, weil ich sie offensichtlich nicht vollständig verstehe. – EvWill

+3

@EvWill nette Erklärung, warum es nicht funktioniert mit primitiven hier https://github.com/angular/angular.js/wiki/Understanding-Scopes – Mirko

+3

Ich war es falsch für mehr als einen Monat, vielen Dank. Wenn dies nicht der richtige Weg ist, sollte Angular es Entwicklern nicht erlauben, den Code auf diese Weise zu schreiben. Dieses Problem erschreckte mich für zwei komplette Nächte. : D –