簡體   English   中英

帶$ http響應的角度過濾器

[英]Angular filter with $http response

我需要在需要進行$ http調用然后返回該響應的過濾器。 我正在嘗試使用有角度的承諾,但沒有任何效果。 返回不等待響應。 在下面查看我的代碼。 返回{},不等待$ http響應。 我只需要使用過濾器。 想法是將其與Controller分開,以便以后可以在任何地方使用。

.filter('filterXML',['testOne','$sce',function(testOne, $sce){

    return function(url){

       return testOne.getTest(url).then(function(data){
         return data;
        });

    }

 }])


.factory('testOne',  ['$http', function($http){
   return {
   getTest: function(url){
    return $http.get(url).success(function(data){
      console.log(data)
      return data;
    })
  }
 }
}])

目標:{{' http://rss.cnn.com/rss/cnn_topstories.rss '| filterXML}}

因此它將返回此rss feed中的所有數據。

我不想使用controller 想法是制作單獨的模塊並在應用程序中的任何位置調用它。

任何幫助將不勝感激 。 謝謝

您不應該在不是用於過濾器的過濾器中進行http調用。 過濾器通常通過對象數組傳遞,只有通過特定條件的對象才會在新的過濾后數組中返回。

我想您想進行這樣的設置...

angular.module('foo', [])

.controller('someController', ['$scope', '$filter', 'testOne', function($scope, $filter, testOne){

    testOne.getTest('foo/bar').then(function(data){
      $scope.myFilteredData = $filter('filterXML')(data);
    });

}])


 .filter('filterXML', function() {
  return function(input) {
    // the condition on which to filter the input goes here...
    // this is just dummy code you will have to work out your own logic
    return (input === 'XML');
  };
});


.factory('testOne',  ['$http', function($http){
   return {
   getTest: function(url){
    return $http.get(url)
      .success(function(data){
        console.log(data)
        return data;
      });
  }
 }
}])

使用服務。 實際上,您已經創建了一個:

.factory('testOne',  ['$http', function($http){
   return {
   getTest: function(url){
    return $http.get(url).success(function(data){
      console.log(data)
      return data;
    })
  }
 }
}])

現在只需將$ testOne注入您的控制器,然后在您的控制器中執行以下操作:

var service = $testOne;
service.getTest('http:/some.url').then(function(response){ /*do something with the response */}); 

我不想使用controller。 想法是制作單獨的模塊並在應用程序中的任何位置調用它。


看到我想使我的代碼與Controller分開。 否則每次我都必須將這些行放在每個控制器中。因此從過濾器中調用它,然后它就可以在我們將調用的任何地方運行。


我建議您將其轉換為服務,然后(以便可以在任何地方使用),將要使用的所述服務的方法公開到$rootScope *(因為面對現實, filter不是您想要的東西)對於)。


app.service('someServiceName', function ($http) {
  function getStuff (url) {
    return $http.get(url).then(function (res) {
      return res;
    });
  }

  angular.extend(this, {
    getStuff: getStuff
  });
});

app.run(function ($rootScope, someServiceName) {
  $rootScope.getStuff = someServiceName.getStuff;
});

{{ getStuff(url) }}

*:我通常不建議將內容公開到$root ,但是如果不使用DI(如果我正確讀取所有評論/答案/問題),您似乎已經死定了,這將在$scopes中進行被呈現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM