2015-04-25 37 views
1

我正在使用API​​将数据加载到Mongoose中来创建一个简单的AngularJS SPA。使用API​​和Mongoose的AngularJS SPA

我的应用程序只是添加,显示和编辑成员列表。它在我将工厂服务中的成员存储在数组中时起作用,但现在我想通过API将其更改为连接到Mongoose。

app.factory('SimpleFactory', ['$http', function($http){ 

    var factory = {}; 

    var members = $http.get('/api/members') 


    factory.getMembers = function() 
    { 
     return members = $http.get('/api/members'); 
    } 

    factory.getMember = function (index) { 
     if (index >=0 && index < members.length) { 
      return members[index] = $http.get('/api/members/' + member_id) 
     } 
     return undefined 
    } 


    factory.addMember = function(member) { 
     return $http.post('/api/members',member) 
    } 
    factory.updateMember = function(index,member) { 
     $http.put('/api/members/' + member_id, member) 
    } 

    return factory; 
}]) 

控制器

app.controller('MembersController', ['$scope','SimpleFactory', 
    function ($scope,SimpleFactory) { 


    SimpleFactory.getMembers() 
    .success(function(members) { 
    $scope.members = members; 
    }); 


$scope.addMember = function() 
{ 
    var member = { 
     name: $scope.newMember.name, 
     address: $scope.newMember.address, 
     age : $scope.newMember.age, 
     level : $scope.newMember.level, 
     swimmer : $scope.newMember.swimmer, 
     email : $scope.newMember.email, 
     regdate : $scope.newMember.regdate, 
       } 

     SimpleFactory.addMember(member) 
     .success(function(added_member) 
     { 
     $scope.members.push(added_member); 
     $scope.newMember = { } 
     }  ); 
} 

}]) 

但我不知道如何改变我的控制器,用于更新一员,它有如下编码从拿起成员在我的工厂设置中的数组,我如何编码以通过API从Mongoose中获取成员:

app.controller('MemberDetailController', ['$scope', '$location', '$routeParams', 'SimpleFactory', 
    function($scope, $location, $routeParams, SimpleFactory) { 

     $scope.member = { 
      index: $routeParams.member_index, 
      detail: SimpleFactory.getMember($routeParams.member_index) 
     } 


     $scope.updateMember = function() { 
      SimpleFactory.updateMember($scope.member.index, 
       $scope.member.detail) 
      $location.path('/members') 
     } 

    } 
]) 

任何人都可以帮忙,它不是一个复杂的应用程序,但我只学习,我卡在这里!

感谢

回答

1

$scope.member对象应承诺getMember设置成功后。

代码

SimpleFactory.getMember($routeParams.member_index).then(function(data){ 
    $scope.member = { 
     index : $routeParams.member_index, 
     detail : data.user 
    }; 
}); 

除此之外,你需要确保getMember方法,而指数是0

factory.getMember = function (index) { 
     var deferred = $q.defer(); 
     if (index >=0 && index < members.length) { 
      return members[index] = $http.get('/api/members/' + member_id) 
     } 
     deferred.resolve; 
    } 

更新

应该总是返回一个承诺唤起更新你需要首先改变服务的方法,这将ret瓮承诺

factory.updateMember = function(index,member) { 
    return $http.put('/api/members/' + member_id, member) 
} 

然后调用factory.updateMember决心,承诺,然后做$location.path

$scope.updateMember = function() { 
    SimpleFactory.updateMember($scope.member.index, $scope.member.detail) 
    .then(function(data) { 
     $location.path('/members') 
    }); 
}; 
+0

感谢pankajpakar,您怎么看这个应该怎么努力updateMember:? “$ scope.updateMember =函数(){ SimpleFactory.updateMember($ scope.member.index, $ scope.member.detail) $ location.path( '/成员') }” – thirty

+0

@thirty看看更新的答案和做upvote如果它确实帮助你,THanks :) –

+1

感谢pankajpakar – thirty