2016-03-22 11 views
0

私は角度流星とイオンを使ってtodoアプリを開発しています。 私は入力とリストを持つビューを持っています。 編集をクリックすると、項目の名前が入力に表示され、それを編集してから適用します。 これまでのところすべてうまくいきましたが、変更を適用すると入力したテキストがそこに残ってしまい、別のtodoをクリックして編集するとそのタイトルは入力に表示されませんが、適用をクリックすると、変更されます。ここ角度流星:モデル値の変更はビューを変更しません

enter image description here

ビューのコードです:

<ion-view view-title="Task ongoing"> 
    <ion-content> 
      <div class="item item-input-inset"> 
       <label class="item item-input"> 
        <input type="text" ng-model="n" placeholder="click on a task to edit it"> 
       </label> 
       <button class="button button-balanced button-small" 
         style="margin:1%" 
         ng-click="editTask(n)"> 
        <span class="glyphicon glyphicon-plus"></span> Apply</button> 
      </div> 
     <ion-item ng-repeat="t in todos | filter:'ongoing'"> 
      {{t.name}} <strong>{{t.status}}</strong> <span class="badge" ng-click="enableEditTask(t)" >Edit</span> 
      <span class="badge" ng-click="makeTaskDone(t)" style="right: 67px" >Done</span> 
     </ion-item> 
    </ion-content> 
</ion-view> 
ここ

は、メソッドのコードは、サーバーである:

Meteor.methods({ 
     makeDone:function(task){ 
      Todos.update({_id:task._id},{$set:{status:'done'}}); 
     }, 
     editTask:function(name,task){ 
      Todos.update({_id:task._id},{$set:{name:name}}); 
     } 
    }) 

と、ここで、クライアント上のコード(角)

$scope.makeTaskDone=function(task){ 
       Meteor.call('makeDone',task); 
      }; 

      $scope.enableEditTask = function(task) { 
       $scope.task=task; 
       $scope.n=task.name; 
      }; 

      $scope.editTask=function(name){ 
       Meteor.call('editTask',name,$scope.task); 
       $scope.n=""; 
      } 

Todos.updateが呼び出された後で問題が起こると思います。

Ps:私は安全でないパッケージでこれを試しました。同じ問題が発生しました。

答えて

0

$scopeモデルの角度を変更する場合は、$scope.$apply(...)でメソッドを呼び出す必要があります。これは、ダイジェストとピックアップを実行して変更が反映され、ビューを更新できるようになります(ngDocs)。これは、角度で呼び出されないすべての非同期関数に適用されます。

関連する問題