2014-09-11 3 views
1

Я новичок в угловой. Я использую контроллер, чтобы захватить данные с завода, которые я населенной с $ http.get, который подключается к REST API:

videoModule.factory('myFactory', function($http){ 
    var factory = {}; 
    factory.getStuff = function(success, error) { 

     return $http({method: 'GET', url: '/api/backup'});   
    }; 
    factory.postStuff = function(stuff){ 

    }; 
    return factory; 
    }); 

Вот мой код контроллера:

app.controller('myController', function($scope, $http, myFactory){ 
     myFactory.getStuff().success(function(data, status, headers, config){ 
      $scope.stuff = data; 
      console.log(data); 

      $scope.selectedStuff = function($scope, $http){ 
       var selectedFile = data[0].File_Name; 
       var selectedDir = data[0].File_SubDir; 

       var pack = selectedDir + "/" + selectedFile; 
       console.log(pack); 

       var result = { File_Location: pack }; 
       console.log(result); 

       $http.post('api/test', result).success(function(data, status, headers){ 
        console.log("Selected Video Sent to /api/test"); 
      }); 
      }; 
     }). 
     error(function(data, status, headers, config) { 
      console.log("ERROR", data, status); 
     }); 
    }); 

Первые две строки внутри .success (function()) работают нормально - они загружают объекты JS, которые я могу использовать для привязки к моему HTML. Следующий фрагмент кода работает отлично. У моего представления есть привязка «ng-click = selectedStuff()». Когда этот элемент щелкнут, модуль регистрирует результат, объект JS {File_Location: pack} на мою консоль.

Однако я столкнулся с трудностями в следующих трех строках. Когда я пытаюсь POST этого объекта/API/тест, я получаю сообщение об ошибке в моих Девых инструментах:

TypeError: Cannot read property 'post' of undefined at k.$scope.selectedVideo. 

У меня возникли проблемы выяснить, почему $ НТТР встретив как определено. Кто-нибудь сталкивался с этой проблемой раньше?

ответ

0

это потому, что $ scope.selectedStuff ожидает два аргумента ($scope, $http) и в ng-click=selectedStuff() вы не посылать никаких параметров, оставляя $ HTTP, как определено в функции.

Вы можете удалить аргументы из функции, поскольку они могут быть взяты из глобальной области.

$scope.selectedStuff = function(){ 
      var selectedFile = data[0].File_Name; 
      var selectedDir = data[0].File_SubDir; 

      var pack = selectedDir + "/" + selectedFile; 
      console.log(pack); 

      var result = { File_Location: pack }; 
      console.log(result); 

      $http.post('api/test', result).success(function(data, status, headers){ 
       console.log("Selected Video Sent to /api/test"); 
     }); 
     }; 

Кроме того, я хотел бы предложить вам рассмотреть вопрос о приведении $scope.selectedStuff определения вне успеха обратного вызова myFactory.getStuff().

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