2016-10-28 16 views
0

AngularJsの新機能です。ファクトリーをangleJSのhttpサービスを使って書くことができますか?ファクトリーではなく、ビジネスオブジェクトを返すようにして、成功の場合はスコープ変数に値を代入してください。私はウェブ上で非常に多くの記事を研究しましたが、すべてがコールバック関数を使用しているか、httpサービスからの約束を返しています。
要件: XMLtoJsonServiceがxmlをローカルフォルダからjsonに変換する私の工場であるとしましょう。私のコントローラで私が使用することができるはずように、工場出荷時にはこのコードは// 正常に動作しているしかし、私の要件は、私のコントローラになるようにこのコードを変換することですanglejsでhttp getを使用してファクトリからビジネスオブジェクトを返す方法

//controller 
    var obj = XMLtoJsonService.MethodName(); 

**(No promises or callback function should be used in controller)** 
/*******service code****************/ 

    App.factory('XmlToJsonSvc', 
      [ '$http', function($http) { 
       return { 
        get : function(path, callback) { 
         $http.get(path, { 
          transformResponse : function(data) { 
           // convert the data to JSON and provide 
           // it to the success function below 
           var x2js = new X2JS(); 
           var json = x2js.xml_str2json(data); 
           return json; 
          } 
         }).success(function(data, status) { 
          //console.log('Sucess'); 

          callback(data); 
         }) 
        } 
       } 
    } ]); 

/*********Controller Code **********/ 
var setData = function(data) { 

      return new Menus(data); 

      debugger 
     } 
     var path = "Configs/Config.xml"; 
     XmlToJsonSvc.get(path, setData); 

//次のようにリターン・ビジネス・オブジェクトでなければなりませんそれはVARのように// OBJ = XmlToJsonSvc.get(パス) が// objが、私は別のサービス

+0

を使用することでしょうJSONオブジェクトを持っている必要がありますので、あなたが全体のBRを阻止する上で計画してくださいowserはhttp応答を保留していますか? –

+0

いいえ私はビジネスオブジェクトを返すことができるサービスを使いたいと思います。私は、私がサービスから返すjsonオブジェクトに基づいてオブジェクトを初期化しています。 – ceepee

+0

あなたのサービスに約束しておいてください。それはうまくいくかもしれない。 – SayusiAndo

答えて

0

<!--In this funcion calling factory function restCall() from controller. 
 
before that i have assigned a already created factory object to a scope variable in controller 
 
.So whenever factory varaible updates,that update will be available to controller automatically. 
 
Some kind of 2-way binding method from factory object--> 
 

 

 
<!DOCTYPE html> 
 
<html lang="en" ng-app="app"> 
 
<head> 
 
    <meta charset="UTF-8"> 
 
    <title>Test</title> 
 
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script> 
 
</head> 
 
<body ng-controller="myCtrl"> 
 
    {{obj.data1}} 
 
    
 
    <button ng-click="clickFn()">Clicking this will call service</button> 
 

 
<script> 
 

 
    (function() { 
 
     var app = angular.module("app",[]) 
 
     
 
     .controller("myCtrl",function(myFactory,$scope){ 
 
     
 
     $scope.obj = myFactory.bObject; 
 
     
 
     $scope.clickFn = function(){ 
 
      myFactory.restCall(); 
 
     } 
 
     
 
      
 
     }).factory("myFactory",function($timeout){ 
 
     
 
     var bObject = { 
 
      data1 :null 
 
     }; 
 

 
     function restCall(){ 
 
      $timeout(function(){ 
 
      bObject.data1 = bObject.data1 ? false : true ; 
 
      },1000); 
 
     } 
 
     
 
     var service = { 
 
      bObject : bObject, 
 
      restCall : restCall, 
 
     } 
 
     return service; 
 
     
 
     }); 
 
    }()); 
 

 
</script> 
 

 

 
</body> 
 
</html>

+0

あなたのお陰でNikhilに感謝します。機能(パス、コールバック:私は、このようないくつかは、私は工場App.factory( 'XmlToJsonSvc' を持っている \t \t [ '$のhttp'、関数($ HTTP){ \t \t \tリターン{ \t \t \t \t取得を必要とします){ \t \t \t \t \t $ http.get(パス、{ \t \t \t \t \t \t transformResponse:機能(データ){ \t \t \t \t \t \t \t //)( \t \t \t \t \t \t \t //それ \t \t \t \t \t \t \tするvar x2js =新しいX2JS以下の成功関数にJSONにデータを変換して提供すること。 \t \t \t \t \t \t \tするvar JSON = x2js.xml_str2json(データ)。 \t \t \t \t \t \t \t return json; \t \t \t \t \t \t} \t \t \t \t \t})。成功(関数(データ、ステータス){ \t \t \t \t \t \t //コンソール。log( '成功'); \t \t \t \t \t \tコールバック(データ); \t \t \t \t \t})\t \t \t \t}}])。 私はこのサービスを変更する必要があります – ceepee

+0

しかし、ここであなたはコールバックを述べた –

+0

私は工場ではなく、controller.Uでは何もまたは何もロジックを使用することができますこれの上に任意の数のサービスやラッパー関数を書くことができますvar obj = Xmlsercvice.MethodName()のように使用します。 – ceepee

関連する問題