2015-06-11 62 views
0

我使用AngularJS和D3.JS呼叫使用AngularJS

我有以下的HTML表单相同$ http.get()在2个不同的指令:

<div simple-chart chart-data="lineData"></div> 

这是挂接像这样一个指令:

mist.directive("simpleChart", function($window, $http){ 
    return{ 
     restrict: "EA", 
     template: "<svg width='750' height='200'></svg>", 
     link: function(scope, elem, attrs){ 
      function drawLineChart() { 
       //initilize the line chart 
      } 
      $http.get("myurl") 
      .success(function(data, status, headers, config){ 
       drawLineChart(); 
      }) 
     }} 
    }); 
  1. 是否有可能无需再次调用它来创建使用从$ http.get(“myurl”)中的数据的另一个指令?
  2. 是否可以使$ http.get(“myurl”)通用,以便可以通过不同的指令调用它?
  3. 我可以使用类似的东西吗? Can't get correct return value from an jQuery Ajax call
+0

使用服务/工厂。 – kwangsa

回答

0

您可以创建一个返回$ http.get('myurl')的服务,并将其作为依赖添加到您的指令中。

mist.factory('dataService', function ($http) { 
    var dataService= {}; 
    dataService.getData = function(){ 
     return $http.get('myurl'); 
    } 
    return dataService; 

}); 

mist.directive("simpleChart", function($window, dataService){ 
return{ 
    restrict: "EA", 
    template: "<svg width='750' height='200'></svg>", 
    link: function(scope, elem, attrs){ 
     function drawLineChart() { 
      //initilize the line chart 
     } 
     dataService.getData() 
     .success(function(data, status, headers, config){ 
      drawLineChart(); 
     }) 
    }} 
}); 
1

您可以将您的http调用包装到服务中,并使用类似angular-cache的缓存来响应服务器。

+0

因为我是初学者,所以我发现angular-cache对我来说太高级了,但是我确实在读取了$ cacheFactory.Cache,而且这似乎是我可以用来代替的东西。 –

0

由于我使用AngularJS1.3,我需要使用

  mist.factory('dataService', function ($http) { 
      return { 
       getData: function() { 
        //since $http.get returns a promise, 
        //and promise.then() also returns a promise 
        //that resolves to whatever value is returned in it's 
        //callback argument, we can return that. 
        return $http.get('http://url.com').then(function (result) { 
         return result.data; 
        }); 
       } 
      }; 
     }); 

     mist.directive("simpleChart", function ($window, dataService) { 
      return{ 
       restrict: "EA", 
       template: "<svg width='750' height='200'></svg>", 
       link: function (scope, elem, attrs) { 
        function drawLineChart() { 
         //initilize the line chart 
        } 
        dataService.getData().then(
          function (data) { 
           drawLineChart(); 
          }, 
          function (err) { 
           console.log("Sorry we encountered an error " + err); 
          } 
        ); 
       }}; 
     }); 

来源:http://www.benlesh.com/2013/02/angularjs-creating-service-with-http.html