AngularJS SPA使用API​​和Mongoose

我正在创build一个简单的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 = { } } ); } }]) 

但我不知道如何更改我的控制器更新成员,它被编码如下从我的工厂设置从数组中挑选成员,我如何编码它通过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') } } ]) 

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

谢谢

您的$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; } 

更新

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

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

然后调用factory.updateMemberparsing这个promise,然后执行$location.path

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