2013-10-11 3 views
29

Sono nuovo in AngularJS e sto avendo un problema che sto avendo problemi a risolvere, c'era una domanda simile su StackOverflow ma non sembrava aiutarmi. Fondamentalmente ho un modulo che viene aggiornato da ng-click, ma una volta una volta inserisco del testo in una qualsiasi delle caselle di testo, quelle caselle di testo non si aggiornano più.ng-model non si aggiorna più dopo aver digitato l'input di testo

Questo è il mio 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> 



Questa è la mia funzione che viene chiamata quando un utente fa clic su un link

$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; 
    }) 
} 

risposta

115

tuo link richiede un login.

se devo indovinare il tuo problema, potrebbe essere correlato al problema degli ambiti angolari. prova invece a cambiare il tuo binding ng-model con una proprietà dell'oggetto. così nel tuo html, invece di:

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

fare questo

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

e nel tuo javascript, sulla callback ajax, modificarlo a:

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

per maggiori informazioni su questo problema, vedere: https://github.com/angular/angular.js/wiki/Understanding-Scopes

+5

grazie mille, che l'ha risolto in circa 60 secondi. Leggerò sicuramente sugli ambiti prima di continuare con questo progetto, perché chiaramente non li capisco completamente. – EvWill

+3

@EvSempre buona spiegazione perché non funziona con primitiva qui https://github.com/angular/angular.js/wiki/Understanding-Scopes – Mirko

+3

Stavo usando il modo sbagliato per più di un mese, grazie mille. Se questo non è il modo corretto, allora Angular non dovrebbe permettere agli sviluppatori di scrivere il codice in questo modo. Questo problema mi ha sconvolto per due notti complete. : D –