Thinkster MEAN стек учебник, удаление элемента

0

Я слежу за учебником ThinkStation Stack, и он отлично работает. Поэтому я создал свой собственный проект, и до сих пор все работает нормально. Однако они не рассматривали, как удалить сообщения. И я могу для жизни не понять, как удалить элемент из данных.

AngularApp.js

var app = angular.module('KOL', ['ui.router'])
    .config(['$stateProvider', '$urlRouterProvider', function($stateProvider, $urlRouterProvider) {
        $stateProvider
            .state('home', {
                url: '/home',
                templateUrl: "/views/home.ejs",
                controller: 'kolCtrl',
                resolve: {
                        patientPromise: ['patients', function(patients) {
                            return patients.getAll();
                        }]
                    }
            })
            .state('details', {
                url: '/details/{id}',
                templateUrl: './views/details.html',
                controller: 'detailsCtrl'
            });

            $urlRouterProvider.otherwise('home');
    }])
    .factory('patients', ['$http', function($http){
        var object = {
        patients: []               

       };

        object.getAll = function() {
            return $http.get('/patients').success(function(data) {
                angular.copy(data, object.patients);
            });
        }

        object.create = function(patient) {
        return $http.post('/patients', patient).success(function(data){
            object.patients.push(data);
        });
    }


    };
        return object;
    }])
    .controller('kolCtrl', ['$scope', 'patients', 
        function($scope, patients){

              $scope.patients = patients.patients;
              $scope.selectedItem = $scope.patients[0];


              $scope.addPost = function() {
                if(!$scope.title || $scope.title === '') { return; }
                if(!$scope.age || $scope.age === '') { return; }
                patients.create({
                    name: $scope.title,
                    age: $scope.age,
                })

                $scope.title = '';
                $scope.age = '';

              };



              object.delete = function(patient)            

    }])
    .controller('detailsCtrl', [
        '$scope',
        '$stateParams',
        'patients',
        function($scope, $stateParams, patients){


        $scope.patient = patients.patients[$stateParams.id];
    }])


;

Home.ejs

<div class="container">
        <div clas="row">

            <div style="width: 200px; margin-top: 100px">
            <select  ng-model="selectedItem" ng-options="patients.name for patients in patients" class="pull-left form-control" name="Vælg"></select>
            </div>
            <div class="viewbox pull-right">
                <h3>Patient: {{selectedItem.name}}</h3>
                <p>Age: {{selectedItem.age}} </p>
                <p>index: {{patients.indexOf(selectedItem)}}</p>
                <button><a href="#/details/{{patients.indexOf(selectedItem)}}">Rediger</a></button>
                <button ng-click="deleteItem(patients.indexOf(selectedItem))">Delete</button>
            </div>





        </div>
        <div class="row" class="pull-left">
            <div style="width: 200px; margin-top: 100px">
            <form  role="form" class="form-group" ng-submit="addPost()">
                <input  class="form-control" type="text" ng-model="title" />
                <input  class="form-control" type="text" ng-model="age" />
                <button type="submit">Add</button>
            </form>
            </form>
        </div>
     </div>
     </div>

index.js (маршрут get и post)

var express = require('express');
var router = express.Router();



/* GET home page. */
router.get('/', function(req, res, next) {
  res.render('index', { title: 'Express' });
});

var mongoose = require('mongoose');
var Patient = mongoose.model('Patient');

router.get('/patients', function(req, res, next) {
  Patient.find(function(err, patients){
    if(err){ return next(err); }

    res.json(patients);
  });
});

router.post('/patients', function(req, res, next) {
  var patient = new Patient(req.body);

  patient.save(function(err, post){
    if(err){ return next(err); }

    res.json(patient);
  });
});

router.delete('/patients/:patient', function(req, res, next) {
    req.patient.remove(function(err, patient){
      if (err) { return next(err); }
      res.json(patient);
    });
});

router.param('patient', function(req, res, next, id) {
  var query = Patient.findById(id);

  query.exec(function (err, patient){
    if (err) { return next(err); }
    if (!post) { return next(new Error('can\'t find patient')); }

    req.patient = patient;
    return next();
  });
});

router.get('/details/:patient', function(req, res) {
  res.json(req.patient);
});

module.exports = router;

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

  • 0
    Можете ли вы показать нам файл JS, который обрабатывает ваши запросы? Вы опубликовали файл angularjs, но показали нам файл node.js / express.js, который должен иметь функции get и post.
  • 0
    Спасибо за ответы. Я отредактировал, так что теперь он содержит index.js, который содержит маршруты. Это помогает?
Теги:
mean-stack

2 ответа

1

Согласно вашей функции, которые вы передаете в router.delete в вашем index.js файла:

router.delete('/patients/:patient', function(req, res, next) {
    req.patient.remove(function(err, patient){
      if (err) { return next(err); }
      res.json(patient);
    });
});

Вы должны будете добавить в patients.id к URL при использовании delete глагола с $http службой. Таким образом, вы можете добавить метод delete объекта на завод ваших пациентов:

.factory('patients', ['$http', function($http){
    var object = {
    patients: []               

   };

    object.getAll = function() {
        return $http.get('/patients').success(function(data) {
            angular.copy(data, object.patients);
        });
    }

    object.create = function(patient) {
    return $http.post('/patients', patient).success(function(data){
        object.patients.push(data);
    });
    }

    //add patient id to the url
    object.delete = function(patient) {
    return $http.delete('/patients/',patient).success(function(data){
        console.log(data);
    });
    }
}


};
    return object;
}])
  • 0
    Там написано, что я не могу выполнить функцию (Patient.id) (неожиданный токен)
  • 0
    Что ж, теперь он говорит: object.delete = function (Patient.id), но выдает ошибку в console.log, когда я обновляю страницу (неожиданный токен. В строке 40). Строка 40 - object.delete = function (Patient .Я бы). Это может быть правильно?
Показать ещё 9 комментариев
0
 object.delete = function(patient) {
        return $http.delete('/patients', patient).success(function(data){
            for(var i = 0; i < object.patients.length; i++) {
                if(object.patients[i].id == patient.id) {
                    object.patients.splice(i, 1);
                }
        });

Что-то вроде этого, может быть, трудно сказать, не зная ответа. Если ответом (данными) является удаленный пациент, тогда вы можете использовать "if (object.patients [i].id == data.id)" вместо

  • 0
    Я загрузил данные ответа. Это имеет больше смысла? :) Спасибо за ответы. Также пытаюсь использовать то, что вы опубликовали. Я дам Вам знать!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню