2016-10-10 3 views
0

Я делаю онлайн-учебник, где они учат вас создавать простые веб-приложения с использованием MEAN. Ниже приведен код для редактирования данной коллекции объектов JSON (видео являются объектами JSON здесь) Коллекция находится на /api/videos Так что я должен нажать на href="/#/video/{{video._id}}, который приведет меня к form.html, и у меня есть возможность редактировать параметры «название» и «описание» объекта JSON. То, что я не могу понять:Я не могу понять рабочий процесс этого кода

а) Почему это (полный код ниже в вопросе) требуется

var Videos = $resource('/api/videos/:id', { id: '@_id' }, 
     { 
      update: { method: 'PUT' } 
     }); 

Поскольку я на href="/#/video/{{video._id}} не могу напрямую взять идентификатор из URL-адрес

var Videos=$resource('api/videos) 

Videos.get({ id: $routeParams.id }, function(video){ 
      $scope.video = video; 
     }); 

б) Whait является рабочим процессом (то есть, когда есть router.get() запрос точно сделал и когда запрос router.put() сделали) по мне, когда я нажимаю на сохранение кнопка Controller делает запрос запроса t API, но я не могу понять, когда делается запрос router.get()

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

Это form.html код

<h1>Add a Video</h1> 

<form> 
    <div class="form-group"> 
     <label>Title</label>   
     <input class="form-control" ng-model="video.title"></input> 
    </div> 
    <div> 
     <label>Description</label> 
     <textarea class="form-control" ng-model="video.description"></textarea> 
    </div> 
    <input type="button" class="btn btn-primary" value="Save" ng-click="save()"></input>  
</form> 

Это код контроллера

app.controller('EditVideoCtrl', ['$scope', '$resource', '$location', '$routeParams', 
    function($scope, $resource, $location, $routeParams){ 
     var Videos = $resource('/api/videos/:id', { id: '@_id' }, 
     { 
      update: { method: 'PUT' } 
     }); 

     Videos.get({ id: $routeParams.id }, function(video){ 
      $scope.video = video; 
     }); 

     $scope.save = function(){ 
      Videos.update($scope.video, function(){ 
       $location.path('/'); 
      }); 
     } 
    }]); 

Это API Endpoint Code

router.get('/:id', function(req,res){ 
    var collection =db.get('videos'); 
    collection.findOne({_id: req.params.id},function(err,video){ 
     if(err) throw err; 
     res.json(video); 
    }); 
}); 
router.put('/:id', function(req, res){ 
    var collection=db.get('videos'); 
    collection.update({_id:req.params.id}, 
    {title: req.body.title, 
    description: req.body.description 
    }, 
    function (err,video) 
    {if (err) throw err; 

     res.json(video); 
    }); 
}); 

ответ

1

Ну, по AngularJS docs for $resouce, $ ресурс:

Завод, создающий объект ресурса, который позволяет взаимодействовать с RESTful источников данных на стороне сервера.

Другими словами, это ярлык для операций служб RESTful. В приведенном ниже коде создается интерфейс с конечной точкой API, чтобы сделать операции REST более легкими. После того как вы это:

var User = $resource('/user/:userId', {userId:'@id'}); 

Гораздо легче сделать это:

User.get({userId:123}, function(user) { 
    user.abc = true; 
    user.$save(); 
}); 

Поскольку RESTful является стандартом, и $resource является реализация Угловая по потреблению API, в данном стандарте. На его внутренней стороне делается асинхронный запрос с заголовками и методом propper в соответствии с операцией, которую вы определили и выбрали.

Смежные вопросы