2015-10-13 45 views
1

我已經將角度模式作爲指令。我的目標是使用給定的表單數據發送一個json文件的post請求。我不知道如何設置發佈請求。我讀過$ http爲我處理JSON.stringify(),所以我不需要爲該帖子配置數據。我也想知道是否需要設置我的標題?以下是我的大部分數據。使用角度UI模式發出帖子請求

我做了一個json文件來容納一個數組,我從中得到一個啤酒列表。

的addBeer()函數是我理想的情況使工廠

發佈請求因爲它的立場,現在我建立我的功能,像這樣

function addBeer() { 
      return $http.post(url,{ 
       data: JSON.stringify({}), 
       headers: {'Content-Type': 'application/json'} 
      }) 
      .then(function(response) { 
       console.log('response', response); 
      }) 


     } 

這將成爲其中的一部分廠。在整個工廠,我遵循約翰帕帕風格指南。 getBeerList()正在獲取整個json文件,而getBeer()正在獲取我正在查找的每個單獨的啤酒。

(function() { 
    'use strict'; 
    angular 
     .module('beerApp.services.beerList',[]) 
     .factory('beerListFactory', beerListFactory); 

     beerListFactory.$inject = ['$http', '$log']; 

     function beerListFactory($http, $log) { 
      var url = './app/Services/IBU_list.json'; 

      return { 
       getBeerList: getBeerList, 
       getBeer: getBeer, 
       addBeer: addBeer 

      } 

      function getBeerList(){ 

       return $http.get(url, {catch: true}) 
        .then(getBeerListComplete) 
        .catch(getBeerListFailed); 

        function getBeerListComplete(response) { 

         return response.data; 
        } 

        function getBeerListFailed(error) { 
         console.log('error', error); 
        } 
      } 

      function getBeer(id) { 
       return $http.get(url, { 
        catch: true 
       }) 
       .then(getBeerComplete) 

       function getBeerComplete(response) { 
        console.log('promise', id); 
        console.log('response', response.data.length); 
        var data = response.data; 
        for(var i =0, len=data.length;i<len;i++) { 
         console.log(typeof data[i].id) 
         if(data[i].id == parseInt(id)) { 
          console.log('data i',data[i]); 
          return data[i]; 
         } 
        } 
       } // end of getBeerComplete 
      } //end of getBeer 

      function addBeer() { 
       return $http.post(url,{ 
        data: JSON.stringify({}), 
        headers: {'Content-Type': 'application/json'} 
       }) 
       .then(function(response) { 
        console.log('response', response); 
       }) 


      } 
     } // end of beer Factory 
})(); 

總體目標是推到具有設置像這樣的對象JSON數組:

{ 
"id" : "4", 
"BeerStyle": "American Light Lager", 
"IBU": "8-17", 
"list" : {"drinks": []} 

},

每個飲料的形式應該進入「飲料」陣列

在我的模態實例控制內我正在檢查我設置的表格值

vm.newBeer = {}; 

這裏是我註釋掉addBeer功能的功能,但是這是我的理想與崗位要求

function ModalInstanceCtrl($scope,$modalInstance) { 

      var vm = this; 
      vm.ok = ok; 
      vm.cancel = cancel; 
      vm.newBeer = {}; 
      // vm.addBeer = function() { 

      // } 

      function ok() { 
       console.log('new beer', vm.newBeer); 
       // console.log('IBU',$scope.IBU); 
       console.log('clicked'); 
       $modalInstance.close(); 
      }; 

      function cancel() { 
       console.log('beer', vm.newBeer); 

       console.log('clicked'); 
       $modalInstance.dismiss('cancel'); 
      }; 
     } 

我正確地得到控制檯內的值

<input type="text" class="form-control" placeholder="beer" ng-model="vm.newBeer.beerName"> 

在我的指令I指令中,我打電話給我爲單一啤酒做出的請求。我這樣做是爲了確保我已經設置並可以連接到控制器。我在想,這個職位要求會在決議中發生。

function ModalController($modal, $log , $scope, beerListFactory, $stateParams) { 
      var vm = this; 

      vm.animationsEnabled = true; 
      vm.open = open; 

      function open() { 
       var modalInstance = $modal.open({ 
        animation: vm.animationsEnabled, 
        templateUrl: 'app/components/modal/modal.html', 
        controller: ModalInstanceCtrl, 
        controllerAs: 'vm', 
        bindToController: true, 
        size: 'lg' 
        // resolve: { 
        // title: function() { 
        //  return 'training Info'; 
        // } 
        // }    
       }); 
       modalInstance.result.then(function(selectedItem) { 
        $log.info('beer in modal',beerListFactory.getBeer($stateParams.beerId)); 

        console.log("Confirmed: "+ selectedItem); 
        $scope.selectedItem = selectedItem; 
       }, function() { 
        $log.info('modal dismissed at: ' + new Date()); 
       }); 
      }; 
+0

更改addBeer到:功能addBeer(){ \t回$ http.post(URL,{ \t \t數據:JSON.stringify({}), \t \t頭:{ '內容類型':「應用程序/ JSON '} \t}) \t。然後(功能(響應){ \t \t的console.log(' Sucess: '響應); \t},函數(誤差){ \t \t的console.log('錯誤:',響應); \t }); },這個顯示錯誤發生在後 –

+0

@EmirMarques我希望得到一個不允許的方法。這是我得到的。我不確定如何設置。我需要將newBeer對象放入分配給飲料的數組中。 – Winnemucca

回答

0

如果使用JSON,我會建議採用了棱角分明的$resource工廠。

The returned resource object has action methods which provide high-level behaviors without the need to interact with the low level $http service.

代替$http.get()$http.post(),您可以使用Beer.query()Beer.save()$resource專爲您的服務而設計。

0

我有終於成功地做到了這一點。

HTML

<!--MODAL WINDOW for item details --> 
    <script type="text/ng-template" id="itemModalContent.html"> 
     <div class="modal-dialog " ng-class="{fadeOut: startFade}" ng-hide="hidden"> 
      <div class="modal-content"> 
        <div class="modal-header"> 
         <button type="button" class="cancel right button" data-dismiss="modal" aria-hidden="true" ng-click="cancel()"><i class="fa fa-close"></i></button> 
         <span class="item-name">{{item.name}}</span> 
        </div> 
        <div class="modal-body"> 
         <p class="description">{{item.description}}</p> 
         <input type="hidden" ng-model="item.uniqueid" id="itemid" value="{{item.courseid}}" name="itemid"/> 
         <p class="response"> {{PostDataResponse}}</p> 
         <p class="error"> {{ResponseDetails}}</p> 
        </div> 
        <div class="modal-footer"> 
         <button type="button" class="button cancel btn-default" data-dismiss="modal" ng-click="cancel()">Cancel</button> 
         <button type="button" class="button ok btn-primary" ng-click="confirm()">Sign me up</button> 
        </div> 
       </div> 
      </div> 
     </script> 

myApp.controller('itemModalInstanceCtrl', function ($http, $scope, $uibModalInstance, $timeout, item) { 
    $scope.item = item; 
    $scope.cancel = function() { 
     $uibModalInstance.dismiss(); 
     $('.overlay').hide(); 
    }; 

    updateUrl = '<your URL to post to>'; 

    $scope.confirm = function() { 

     var myItemId = $scope.item.uniqueid; 

     // use $.param jQuery function to serialize data from JSON 
     var data = $.param({ 
      uniqueid: myItemId 
     }); 
      var config = { 
       headers: { 
        'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8;' 
       } 
      } 

      $http.post(updateUrl, data, config) 
      .success(function (data, status, headers, config) { 
       alert(JSON.stringify(data)); 
       $scope.PostDataResponse = "You have signed up!"; 
      }) 
      .error(function (data, status, header, config) { 
       $('.response').addClass('error'); 
       $scope.ResponseDetails = "data: " + data + 
         "<br />status: " + status + 
         "<br />headers: " + header + 
         "<br />config: " + config; 
      }); 
      $timeout(function() { 
       $uibModalInstance.close({}); 
       $('.overlay').hide(); 
      }, 3000); 
    }; 

}); 

祕密不在$scope$http注射傳遞給確認功能,但在全內側基準$scope.item.property功能。希望這可以幫助別人!

+0

另請參閱http://techfunda.com/howto/565/http-post-server-request –