AngularJS 使用 API 和 Mongoose 的 SPA

AngularJS SPA using API and Mongoose

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

我的应用程序只是添加、显示和编辑成员列表。当我只是将成员存储在我的工厂服务中的数组中但现在我想更改它以通过 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 = { }
      }       );
}

}])

但我不确定如何更改我的控制器以更新成员,它的编码如下以在我的出厂设置中从数组中提取成员,我如何编码它以通过 Mongoose 提取成员API:

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')
        }

    }
])

谁能帮忙,它不是一个复杂的应用程序,但我只是在学习,我被困在这里!

谢谢

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

代码

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

除此之外,您需要确保 getMember 方法在索引为 0

时始终 return 一个承诺
   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;
    }

更新

要调用更新方法,您需要先更改服务,这将return 一个承诺

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')
    });
};