2016-05-09 4 views
0

У меня есть базовое приложение CRUD, моя основная проблема заключается в функции удаления.

Угловая контроллер вызывает $ HTTP действие

'use strict'; 

(function(){ 

var app = angular.module('JournalApp', []) 
    .controller('JournalController', function($scope, $http){ 

    var loadEntries = function(){ 
     $http.get('/api/entry') 
      .then(function(response){ 
      $scope.entries = response.data; 
      if(response.data.noEntries){ 
       $scope.entries.noEntries = true; 
      }; 
      }); 
    }; 

    loadEntries(); 

//Create new Journal Entry 
    $scope.addEntry = function(entry){ 
     var data = ({ 
     hours: entry.hours, 
     notes: entry.notes 
     }); 

     $http.post('/api/entry', data); 

     loadEntries(); 
    }; 

//Delete Journal Entry 
    $scope.delEntry = function(item){ 

     $http({ 
     method: 'DELETE', 
     url: '/api/entry', 
     // data: item, 
     data: {date: item.date}, 
     headers: {'Content-Type': 'application/json;charset=utf8'} 

     }, loadEntries()); 
    }; 

    }); 

})(); 

, который направляется на мой стороне сервера обработчика

//GET Request 
    this.getEntries = function(req, res){ 
    journal.find().sort({date: -1}).toArray(function(err, doc){ 
     if(err) throw err; 

     if(doc.length){ 
     console.log('found entries'); 
     res.json(doc); 

     } else { 
     console.log('Returning no Entries.') 
     res.json(({ "noEntries": true })); 
     } 
    }) 
    }; 

    //Post Request 
    this.addEntry = function(req, res){ 
    console.log('Adding new entry...'); 

    var time = new Date(); 
    var notation = req.body.notes || 'n/a' 

    journal.insert({ hours: req.body.hours, notes: notation, date: new Date()}) 
    }; 

    //Delete Request 
    this.deleteEntry = function(req, res){ 

    journal.findOne({"date": new Date(req.body.date)}, function(err, data){ 
     if(err) throw err; 

     console.log('Removing item _id: ' + data._id); 
     journal.remove({"date": data.date}); 

    }); 
    }; 

} 

module.exports = entryHandler; 

можно проверить через Монго (и console.log), что запись была удалено, и все работает так, как предполагалось. Однако обратный вызов $ http не срабатывает. Функция обратного вызова (loadEntries), используемая для обновления журнала, попадает на страницу.

я могу получить обратный вызов, чтобы огонь, когда я пишу код, как

$http.delete('/api/entry', item).then(function(){ loadEntries() }); 

Однако, когда я использую этот метод на стороне сервера обработчик не работает должным образом.

Есть ли лучший способ обойти это без тонны дополнительных модулей? Я бы предпочел изучить основы, прежде чем начинать добавлять пакеты по всему месту, выполняя работу для меня.

EDIT:

Я попытался добавить .then (функция() {loadEntries()}); к моему угловому коду, и он не работает.

ответ

2

Вам нужно позвонить .then на вашем $ HTTP вызов для выполнения функции обратного вызова:

$http({ 
    method: 'DELETE', 
    url: '/api/entry', 
    // data: item, 
    data: {date: item.date}, 
    headers: {'Content-Type': 'application/json;charset=utf8'} 

    }).then(function() { 
     loadEntries() 
    }); 
+0

Я знаю, что мой код выше отличал , но ваше решение было таким, как я написал его изначально, и это не сработало. Я переписал его пару раз и пока не добился успеха. Я также просто дважды проверил и повторил этот код, не работает для меня. –

0

я не смог не успешно назвать свою функцию обратного вызова, независимо от того, что я пытался. Однако моя цель состояла в том, чтобы удалить div из моего приложения, поэтому я просто использовал угловую директиву ng-show/hide, чтобы выполнить это.

0

Помимо .then(), это выглядит как серверный код не возвращает статус завершения вызова, такие как успех/провал аналогично - Удовлетворительно/BadRequest (типа IHTTPctionResult) в C#