2014-10-07 28 views
0

我要求用戶輸入他的詳細信息並提交表單,該表單將調用$ http請求到服務器並傳遞數據。

app.service('Request',function($http,$location) 
var baseUrl='/system/views/files.json'; 
    var method='GET'; 
    var details={} 
    this.flightReq=function(){ 
     $http({ 
      method:method, 
      url:baseUrl, 
      headers:{'Content-Type': 'application/x-www-form-urlencoded'}, 
      params: {'dep':'a', 'arl':'b','number':'c', 'date1':'d'}, 
      cache:true 
     }) 
     .success(function(data,status){ 
      console.log(data); 
      console.log(status); 
      $location.path('/resultpresentation/example'); 
      details.flightDet=function(){ return data } 
     }) 
     .error(function(data,status){ 
      console.log(data||"Request failed"); 
      console.log(status); 
      $location.path('/'); 
     }) 
    }; 

如請求所示,一旦成功,用戶將被重定向到新的位置。 但是,在這個結果頁面上,我現在試圖呈現結果。因此,我必須將結果存儲在一個變量或函數中,我需要將其注入另一個模塊。 http請求被注入到兩個模塊中,但結果只能注入結果模塊。

但是,即使我現在注入服務請求並在控制器中使用$scope.data=Request.flightDet;,我也無法在視圖中顯示數據。我現在可以看到它在控制檯中顯示。飛行結果僅在控制檯中(成功後,但在視圖或控制器中無法訪問)

但是,我不知道該怎麼做?我希望你能幫助我。

最佳

回答

2

建議不要改變service中的路線。相反,您的服務應該只需撥打$http,然後將數據傳回給主叫方。根據來自service呼叫的響應數據,controller必須採取任何進一步行動。

但是,您始終可以將$http.success()內的數據保存到正在撥打電話的service內的本地變量。並且只要您將此服務集成到任何控制器中,您將可以訪問此數據,因爲所有AngularJS service都是單身人士。

編輯:將數據保存到Request服務內的任何消耗controller中使用的服務。

app.service('RequestService',function($http,$location){ 
    var baseUrl='/system/views/files.json'; 
    var method='GET'; 
    var flightDetails={}; 
    this.flightReq=function(){ 
    $http({ 
     method:method, 
     url:baseUrl, 
     headers:{'Content-Type': 'application/x-www-form-urlencoded'}, 
     params: {'dep':'a', 'arl':'b','number':'c', 'date1':'d'}, 
     cache:true 
    }) 
    .success(function(data,status){ 
     console.log(data); 
     console.log(status); 
     flightDetails = data; 
    }) 
    .error(function(data,status){ 
     console.log(data||"Request failed"); 
     console.log(status); 
    }); 
    }; 

    this.getFlightDetails = function(){ 
     return flightDetails; 
    } 
}; 

app.controller('testController', ['RequestService', function(requestService){ 
console.log(requestService.getFlightDetails()); 
}]); 
+0

感謝您的回覆。我看到,我將結果存儲在'details.flightDet = function(){ return data; }'並將請求定義爲'var details = {}'。我現在可以看到結果成功到達了我的結果頁面,或者至少它在控制檯中顯示。但是,即使我現在注入服務'Request'並使用'$ scope.data = Request.flightDet;'我無法在視圖中顯示數據。你懂我的意思嗎? – Dribel 2014-10-08 08:31:14

+0

你能否用這個新的更改更新你的問題? – 2014-10-08 08:48:04

+0

只是做了服務的變化......並做了一些解釋 – Dribel 2014-10-08 09:05:57

1

鑑於當前的業務配置,在.success處理程序可以設置Request.myVar = data,然後在另一個頁面/狀態,您將能夠訪問Request.myVar只要你注入控制器的內部即服務( s)您在該頁面上使用的狀態

+0

感謝您的幫助。我按你的建議做了。但是,正如我在上面解釋的那樣,我仍然遇到問題:/ ...您是否認爲,問題是什麼? – Dribel 2014-10-08 08:32:04

相關問題