2016-01-21 98 views
0

我正在嘗試更新ng-repeat列表中的每個文檔都有自己的形式的ng-repeat中的當前文檔。正在更新mongodb文檔angular-meteor

我試圖讓mongo更新文檔,當我點擊更新按鈕,就像我現在有它的作品,但我不知道這是否是最好的方法。

這裏是我的控制器:

$scope.showPreloader = true; 

$scope.subscribe('events',() => { 
    $scope.showPreloader = false; 
}); 

$scope.helpers({ 
    events: function() { 
     return Events.find({}); 
    } 
}); 

$scope.save = function() { 
    Events.insert($scope.newEvent); 
    $scope.newEvent = undefined; 
    console.log('saved'); 
}; 

$scope.update = function(event) { 
    Events.update({ 
     _id: event._id 
    }, { 
     $set: { 
      name: event.name, 
      description: event.description, 
      background: event.background 
     } 
    }, function(error, data) { 
     if (error) { 
      console.log('unable to update the event: ' + error); 
     } else { 
      console.log('Done!' + data); 
     } 
    }); 
}; 

,你可以在這裏看到,在$scope.update功能,我設置$set所有我想更新的參數,但是我正在尋找一種方法,使之自動,所以我不必輸入每個參數進行更新,就像在$scope.save函數Events.insert($scope.newEvent);中那樣。

這裏的形式:

<div> 
    <div class="spinner" ng-show="showPreloader"></div> 
    <div ng-repeat="event in events | orderBy: '-createdAt'" class="wow fadeInUp col-md-6 events-grid-background" ng-style="{'background-image' : 'url({{event.background}})'}"> 
     <div class="grid-content" ng-init="event.edit = true" ng-show="event.edit" layout="column" layout-wrap layout-align="center center"> 
      <h2 class="blue grid-title">{{event.name}}</h2> 
      <p class="bold">{{event.description | limitTo: 100}}...</p> 
      <a ui-sref="event-detail({eventId: event._id})" class="blue-hover bold">&#161;Leer M&#225;s!</a> 
      <button class="btn btn-default btn-sm" ng-if="isAdmin" ng-click="event.edit = !event.edit"><strong>Editar</strong></button> 
      <button class="btn btn-default btn-sm" ng-if="isAdmin" ng-click="remove(event)"><strong>Delete</strong></button> 
     </div> 

     <!-- event edit form --> 
     <div ng-if="isAdmin" class="grid-content" ng-show="!event.edit"> 
      <form name="form" novalidate> 
       <label class="white" for="name">T&#237;tulo</label> 
       <input id="name" name="name" type="text" class="form-control" ng-model="event.name" required> 
       <label class="white" for="description">Descripci&#243;n</label> 
       <textarea id="description" name="description" type="text" class="form-control" ng-model="event.description" required></textarea> 
       <label class="white" for="background">Imagen</label> 
       <input id="background" name="background" type="text" class="form-control" ng-model="event.background" required> 
       <br> 
       <button type="submit" class="btn btn-primary btn-sm" ng-if="isAdmin" ng-click="event.edit = !event.edit; update(event)"><strong>Guardar</strong></button> 
       <button class="btn btn-default btn-sm" ng-if="isAdmin" ng-click="event.edit = !event.edit"><strong>Cancelar</strong></button> 
      </form> 
     </div> 
    </div> 
</div> 

有沒有辦法做到這一點,而無需設置一個接一個的參數?

謝謝!

回答

0

的解決方案,我用:

var e = event; 
var id = event.id; 
delete e._id 
Events.update({_id: id}, { 
    $set: e 
}, function(err, result) { 
    .. handle result 
});