[英]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.