2013-04-16 14 views
11

Ich versuche, eine angular.js-Ansicht selbst zu aktualisieren, wenn ich einen Kommentar hinzufüge. Mein Code ist wie folgt:

<div class="comment clearfix" data-ng-repeat="comment in currentItem.comments" data-ng-class="{bubble: $first}" data-ng-instant> 
    <div> 
     <p> 
      <span class="username">{{comment.user}}</span> {{comment.message}} 
     </p> 
     <p class="time"> 
      10 minutes ago 
     </p> 
    </div> 
</div> 
<div class="comment reply"> 
    <div class="row-fluid"> 
     <div class="span1"> 
      <img src="assets/img/samples/user2.jpg" alt="user2" /> 
     </div> 
     <div class="span11"> 
      <textarea class="input-block-level addComment" type="text" placeholder="Reply…"></textarea> 
     </div> 
    </div> 
</div> 

der Umfang aktualisiert auf eingeben:

$('.addComment').keypress(function(e) { 
    if(e.which == 10 || e.which == 13) { 
     $scope.currentItem.comments.push({ 
      "user": "user3", 
      "message": $(this).val() 
     }); 
     console.debug("currentItem", $scope.currentItem); 
    } 
}); 

Debuggen $ scope.currentItem zeigt, dass der Kommentar zu ihm hinzugefügt wurde, jedoch die Ansicht zeigt nicht die neuer Kommentar. Ich vermute, dass der $ scope nur auf seiner ersten Ebene beobachtet wird und dass deshalb die Ansicht nicht aktualisiert wird. Ist das der Fall? Wenn ja, wie kann ich es beheben?

LÖSUNG: Als Ajay in seiner Antwort vorgeschlagen unten ich das Array Push in die Anwendung Funktion wie folgt gewickelt:.

var el=$(this); 
$scope.$apply(function() { 
    $scope.currentChallenge.comments.push({ 
     "user": $scope.currentUser, 
     "message": el.val() 
    }); 
}); 
+0

prüft, ob die CSS für den neuen Kommentar hinzugefügt angewendet angezeigt ist verursacht, dass es sich von dem sichtbaren Bildschirm weg bewegt – dreamweiver

+0

danke für den Vorschlag, aber das ist nicht der Fall, ich habe mir die HTML in Firebug und der neue Kommentar wurde eindeutig nicht hinzugefügt. – Dine

+0

aber in deiner Frage hast du beim Debuggen gesagt, dass Kommentar hinzugefügt wurde. Was meinst du damit? – dreamweiver

Antwort

18

den Code in Umfang zu wickeln ändern $ anzuwenden, weil Sie die Eigenschaft außerhalb modifizieren der Winkelbereich, den Sie verwenden müssen scope.$apply(), um die Werte zu beobachten

+0

wenn ich das mache :: $ scope. $ Apply (function() { $ scope.Images.push (Daten); }); "Fehler: [$ rootScope: inprog] $ digest ist bereits in Bearbeitung" Kommt, wenn ich das apply() lösche, dann tritt das gleiche Problem auf wie in der Frage erwähnt. – Developer

+0

Ich denke in Ihrem Fall wäre es etwas wie: $ scope.Images.push (Daten); $ scope. $ apply(); ... – cbaigorri

0

Ich musste mein Formular innerhalb der gleichen Div-Controller als die ng-Wiederholung. Ich hatte zwei separate Div-Controller.

0

Verwenden Sie $ scope. $ Parent.arrayObjet, um die übergeordneten Variablen anstelle von $ scope.arryaObject zu ändern. In meinem Fall hat es funktioniert.

0
<div class="col-sm-12 col-lg-12"> 
      <div class="outer-container"> 
       <div class="inner-container"> 
        <div class="table-header"> 
         <form id="teamForm" name="teamForm"> 
          <table class="table table-bordered"> 
           <thead> 

           <!-- Grid header --> 
           <tbody data-ng-if="(allTeamMembers.length==0)"> 
            <tr> 
             <td class="text-center height_33_p" colspan="15"> {{noResultFound}} </td> 
            </tr> 
           </tbody> 
           <!-- Existing team member --> 

           <tbody data-ng-repeat="tm in teammemberDetailsArryobject|orderBy:orderByField:reverseSort" data-ng-form="innerForm_$index" data-ng-class="{'ng-submitted':innerForm_$index.$submitted}"> 
            <tr></tr> 
            </tbody> 

Im Code, den ich einen Datensatz bin zu löschen und neue Zeile programmatisch hinzufügen, aber alle Zeilen in den ng-Repeat-Zeilen (einschließlich der gelöschten)

+0

Das passiert mir auch. Hast du jemals eine Lösung gefunden? –

Verwandte Themen