2015-04-25 33 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