2015-04-25 3 views
1

Я создаю простой AngularJS SPA, используя API для загрузки данных в Mongoose.AngularJS SPA с использованием API и Mongoose

Мое приложение просто добавляет, отображает и редактирует список участников. Он работает, когда я просто храню элементы в массиве на моем заводском сервисе, но теперь я хочу изменить его, чтобы подключиться к Mongoose через API.

завод

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

    } 
]) 

Может кто-нибудь помочь, это не сложное приложение, но я только учусь, и я застрял здесь!

Благодаря

ответ

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

Update

Для вызова обновления вам необходимо сначала выполнить службу изменения, которая будет 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, если он вам поможет, Спасибо :) –

+1

Спасибо pankajpakar – thirty

Смежные вопросы