2017-01-13 2 views
0

я следующий код, который не работает, как ожидалось, может быть, потому что я новичок на угловой :)Angularjs: Звонок завод дважды на одном контроллере

Я хочу, чтобы повторно вызвать тот же фабричную функцию всякий раз, когда я добавляю новую запись в мою базу данных, потому что эта фабрика даст мне данные БД, обновленные для выполнения моей таблицы html.

Вопрос

Фабрика функция GetData() не вызывается во второй раз, так что я не смог обновить свой $ scope.dataTable

код контроллера

.controller('SomeViewController', function($scope, $routeParams, getData, addData) { 

//scope new record 
$scope.newRecordName = ""; 
$scope.newRecordType = ""; 

//to fulfill html record's table 
getData.then(function(result){ 
    $scope.dataTable = result 
}) 

// submit button calls this 
$scope.addRecord = function(){ 
    addData.record($scope.newRecordName, $scope.newRecordType).then(function(result) { 
     if (result == "OK") { 
      //refresh scope dataTable 
      getData.then(function(result){ 
       $scope.dataTable = result 
      }) 
     } 
    }) 
} 

завод код

factory('getData', function($http) { 
    return $http.get('some/url/') 
     .then(function(response) { 
      return response 
     }) 
}) 
.factory('addData', function($http) { 
    return { 
     record: function(name, type) { 
      return $http.post('some/url', {Name: name, Type: type}) 
       .then(function(response) { 
        return response 
       }) 
     } 
    } 
}) 

Примечание я не могу использовать $ scope.dataTable.push («new_record_here»), потому что его не хватает идентификатор записи, то из базы данных, и мне нужно, что есть таблица, как: ID/Имя/Тип

Спасибо большое

ответ

4

Измени завод к этому

.factory('dataFactory', function($http){ 
    return { 
     getData : function() { 
      return $http.get('some/url/'); 
     }, 
     addData : function(name, type){ 
      return $http.post('some/url/', {Name: name, Type: type}); 
     } 
    }  
}) 

И ваш контроллер к этому

.controller('SomeViewController', function($scope, $routeParams, dataFactory) { 

    //scope new record 
    $scope.newRecordName = ""; 
    $scope.newRecordType = ""; 

    //to fulfill html record's table 
    getAllData(); 

    // submit button calls this 
    $scope.addRecord = function() { 
     dataFactory.addData($scope.newRecordName, $scope.newRecordType).then(function(result) { 
      if (result == "OK") { 
       //refresh scope dataTable 
       getAllData(); 
      } 
     }) 
    }; 

    var getAllData = function() { 
     dataFactory.getData.then(function(result) { 
      $scope.dataTable = result 
     }) 
    } 
}) 
+0

Спасибо за ответ. Это решило мою проблему. Кажется, что служба (dataFactory) не может быть вызвана более одного раза, однако, если мы создадим сервисную функцию (в этом примере dataFactory.getData), это можно вызвать более одного раза. Еще раз спасибо –

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