带$http response的Angular过滤器
Angular filter with $http response
我需要一个过滤器,我需要使$http调用,然后返回该响应。我试图使用角的承诺,但没有工作。Return不等待响应。下面是我的代码。它返回{},而不是等待$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提要中的所有数据。
我不想使用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;
})
}
}
}])
现在只需将$ teston注入到控制器中然后在控制器中执行:
var service = $testOne;
service.getTest('http:/some.url').then(function(response){ /*do something with the response */});
我不想使用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
,
相关文章:
- 使用 Angular 过滤器解码 HTML 实体
- 将变量传递到Angular过滤器中
- HTML中对象数组的多个Angular过滤器选择元素
- 如何在Angular过滤器中使用变量
- 如何使用Angular过滤器按时间戳对数据进行分组
- Angular过滤器|全局设置格式化(最佳实践)
- Angular过滤器——过滤产品和类别
- 基于动态id列表的Angular过滤器
- 针对短语中的单词的Angular过滤器
- Angular过滤器没有返回预期的结果
- 在指令中使用Angular过滤器作为函数
- 使用Angular过滤器删除DOM元素,但不使用jQuery
- 在Angular过滤器表达式中使用管道字符
- Angular过滤器,用于在应用过滤器之前从输入的单词中删除重音
- Angular过滤器将所有下划线替换为空格
- Angular过滤器服务器端生成选择(下拉列表)
- 用Angular过滤器突出显示搜索结果,隐藏不匹配的文本
- Angular过滤器,将ng-repeat对象中的字符串数组与字符串数组进行比较,并过滤掉不匹配的对象
- 带$http response的Angular过滤器
- 为什么Angular过滤器运行两次