2017-04-22 99 views
0

尝试访问$ scope.mySlot.id,但它未定义。无法访问资源的.id值

$scope.removeMe = function() {          
    var shouldRemove = confirm('Remove you from this field trip?'); 
    if (shouldRemove) { 
     var data = null; 
     UserService.me().then(function(me){ 
      var data = {userID: me.id, eventID: tripID} 
      console.log(data); 
      return data; 
     }).then (function(data){ 
      var mySlot = GreenTripFilledSlotsFactory.get(data); 
      return mySlot; 
     }).then (function(mySlot) { 
       $scope.mySlot = mySlot; 
       console.log("this is $scope.mySlot: "); 
       console.log($scope.mySlot);   //this shows up as a resource with proper values 
       console.log("this is $scope.mySlot.id: ") 
       console.log($scope.mySlot.id);  //this is undefined 
     }).then (function(success){ 
       return $scope.mySlot.$delete();  // this isn't working' 
     }).then(function(success){ 
      console.log('mySlot deleted');   
      route.reload(); 
     }).catch(function(error){ 
      console.log(error); 
     }) 
    } 
};  

在console.logs中显示$ scope.mySlot作为资源,它列出了它的值。但我很困惑为什么$ scope.mySlot.id是未定义的。

工厂:

.factory('GreenTripSlotsFactory', ['$resource', function($resource) { 
    return $resource('/api/GreenTripSlots/:id/', {id: '@id' }, { 
    update: {method: 'PUT' } 
    }); 
}]) 
.factory('GreenTripFilledSlotsFactory', ['$resource', 
    function($resource) { 
    return $resource('/api/GreenTripSlots/:userID/:eventID/:slotID', 
    {id: '@id' }, { 
    update: {method: 'PUT' } 
    }); 
}]) 

BACKEND contollers:

// = /api/GreenTripSlots/:userID/:eventID 
    router.route('/:userID/:eventID') 
    .get(function(req,res) { 
     procedures.procGetSlotByUserAndTrip(req.params.userID, 
     req.params.eventID).then(function(greenTripUserSlot){ 
      res.send(greenTripUserSlot); 
     }, function(err) { 
      console.log(err); 
      res.sendStatus(500); 

     }) 
    }) 

// = /api/GreenTripSlots:/userID/:eventID/:slotID 
router.route('/:userID/:eventID/:slotID') 
    .get(function(req,res) { 
     procedures.procGetSlotByUserAndTrip(req.params.userID, 
     req.params.eventID).then(function(greenTripUserSlot){ 
      res.send(greenTripUserSlot); 
     }, function(err) { 
      console.log(err); 
      res.sendStatus(500); 

     }) 
    }) 
    .delete(function(req, res){ 
     procedures.procRemoveMe(req.params.slotID).then(function(){ 
      res.sendStatus(204); 
     }, function(err) { 
      console.log(err); 
      res.sendStatus(500); 
     }); 
    }) 

后台程序:

exports.procGetSlotByUserAndTrip = function(userID, eventID) { 
    return db.fnRow('procGetSlotByUserAndTrip', [userID, eventID]) 
} 

exports.procRemoveMe = function(slotID) { 
    return db.fnEmpty('procRemoveMe', [slotID]) 

SQL存储过程获取:

CREATE DEFINER=`CharleyHannah`@`localhost` PROCEDURE 
`procGetSlotByUserAndTrip`(pUserId INT, pEventId INT) 
BEGIN 
SELECT * 
FROM userEvents u 
WHERE u.userID = pUserId & u.eventID = pEventId; 
END 

SQL存储过程进行删除:

CREATE DEFINER=`CharleyHannah`@`localhost` PROCEDURE 
`procRemoveMe`(pSlotId int) 
BEGIN 
DELETE 
FROM userEvents 
WHERE id = pSlotId; 
END 

回答

0

你的承诺外分配userToRemove那么,它的$ scope.ME assingning之前执行。

+0

我正在成功地获得me.id(其是用户表中的用户ID)。 然后,我通过它成功地获取行中,其中userID和tripID存在于一个联接表中。 这显示在$ scope.mySlot的console.log中但是我无法访问$ scope.mySlot中的数据以使用删除请求 – lightcollector7

1

您的功能GreenTripFilledSlotsFactory.get(data);返回承诺。你可以这样写:

var _promise = GreenTripFilledSlotsFactory.get(data); 
_promise.then(function(res) { 
    $scope.mySlot = res; 
    console.log($scope.mySlot.id); //should display your value now 
}); 

res变量你的对象被存储。

+0

中的连接表中的该行的ID,所以这会导致错误,指出getMySlot不是函数: 'var getMySlot = GreenTripFilledSlotsFactory.get(data); getMySlot.then(函数(RES){$ = scope.mySlot水库; });' 并且这导致一个错误说getMySlot.then不是函数: '变种getMySlot =函数(){ GreenTripFilledSlotsFactory.get(data) }; getMySlot()。then(function(res){scope.mySlot = res; });' – lightcollector7

+0

你可以显示get函数的代码吗? – Torben

+0

我更新了原始文章,以包含更多我使用的代码 – lightcollector7

0

而不是使用的工厂,我在刚使用成功$ http.get和$ http.delete请求:

$scope.removeMe = function() {          
    var shouldRemove = confirm('Remove you from this field trip?'); 
    if (shouldRemove) { 
     var data = null; 
     UserService.me().then(function(me){ 
      var data = {eventID: tripID, userID: me.id} 
      console.log(data); 

      return data; 
     }).then (function(data){ 

      var mySlot = $http.get('/api/GreenTripSlots/' + data.eventID + '/' + data.userID); 
      console.log(mySlot); 

      return mySlot; 
     }).then (function(mySlot) { 

      var slotToDelete = mySlot.data; 
      console.log(slotToDelete); 
      console.log(slotToDelete.id) 

      return slotToDelete; 
     }).then (function(slotToDelete){ 
      var slotID = slotToDelete.id; 
      $http.delete('/api/GreenTripSlots/delete/' + slotID); 
      console.log('deleted successfully')  
      $route.reload(); 
     }).catch(function(error){ 
      console.log(error); 
     }) 
    } 
};  

}])

相关问题