Javascript 向Web API数据添加过滤
我已经设法从Web API返回数据,这些数据可以使用Angular进行显示。但现在我需要能够过滤这些数据。我已经创建了一个指令,该指令传递了我想要过滤的参数,但是我找不到任何关于我将使用什么语法进行过滤的信息。这是我的服务:Javascript 向Web API数据添加过滤,javascript,angularjs,asp.net-web-api,Javascript,Angularjs,Asp.net Web Api,我已经设法从Web API返回数据,这些数据可以使用Angular进行显示。但现在我需要能够过滤这些数据。我已经创建了一个指令,该指令传递了我想要过滤的参数,但是我找不到任何关于我将使用什么语法进行过滤的信息。这是我的服务: var fixtureService = angular.module("fixtureService", ["ngResource"]).factory("Fixture", function ($resource, $rootScope) { fixt
var fixtureService = angular.module("fixtureService", ["ngResource"]).factory("Fixture", function ($resource, $rootScope) {
fixtureService.addFilter = function (seasonNo) {
alert(seasonNo);
//do the filtering here?
};
return $resource(
"/api/fixture/:Id",
{ Id: "@Id" },
{ "update": { method: "PUT" } }
);
});
任何帮助都将不胜感激
编辑:这是我的指令:
app.directive("season", function () {
return {
restrict: 'E',
controller: SeasonCtrl,
template: '<select name="Seasons" ng-model="selectedSeason" ng-options="season.SeasonNo for season in seasons" ng-change="handleChange(season)">\
<option value=""> --Valitse-- </option>\
</select>',
link: function (scope, elem, attrs, ctrl) {
scope.handleChange = function () {
if (scope.selectedSeason != null) {
fixtureService.addFilter(scope.selectedSeason.SeasonNo);
} else {
fixtureService.clearFilter();
}
};
}
};
});
应用程序指令(“季节”,功能(){
返回{
限制:'E',
控制器:按CTRL键,
模板:'\
--瓦利泽--\
',
链接:函数(范围、元素、属性、ctrl){
scope.handleChange=函数(){
如果(scope.selectedSeason!=null){
fixtureService.addFilter(范围.选择的季节.季节号);
}否则{
fixtureService.clearFilter();
}
};
}
};
});
由于您希望在显示目的之外使用它,并且似乎希望在服务级别对其进行过滤,因此您可以使用资源和函数来处理数据。此示例仅使用角度(也可以使用lodash或下划线之类的内容)。基本上,我在服务中保存资源以供使用,并为我将调用和过滤数据的服务创建一些函数。我还为ngrepeat添加了一个常规过滤器
app.controller('MainCtrl',函数($scope,Fixture){
$scope.locations=Fixture.getFilteredata('Austin');
$scope.unfilted=Fixture.getData();
});
angular.module(“fixtureService”,[“ngResource”]).factory(“Fixture”,函数($resource、$rootScope、$q、$filter){
var resource=$resource(“data.json”);
var原始列表=[];
var服务={
getData:function(){
var d=$q.defer();
resource.get(函数(数据){
originallist=data.data.locationlist;
d、 决心(原创者);
});
回报承诺;
},
cityFilter:函数(列表,已筛选){
返回$filter('filter')(列表,{city:filtered});
},
getFilteredData:函数(已筛选){
var self=这个;
var d=$q.defer();
var list=[];//将用于筛选器
//你可以查看我们是否已经有了原始列表,这取决于你是否想缓存它
self.getData().then(函数(数据){
列表=self.cityFilter(原始列表,已过滤)
d、 决议(清单);
});
回报承诺;
}
};
回程服务;
});
过滤
{{location.locationname}位于{{location.city}
未过滤
{{location.locationname}位于{{location.city}
使用重复过滤器进行过滤
{{location.locationname}位于{{location.city}
您能解释一下过滤器的含义吗。您正在尝试筛选$resource返回的内容吗?是的,我只想返回与参数值匹配的数据,在这种情况下,参数是'seasonNo'这只是为了显示吗?即您使用的是ng repeat
?我的指令中没有使用ng repeat(请参见上面的编辑),但它不仅仅用于显示目的,我希望过滤数据,并使其在过滤后可编辑
app.controller('MainCtrl', function($scope, Fixture) {
$scope.locations = Fixture.getFilteredData('Austin');
$scope.unfiltered = Fixture.getData();
});
angular.module("fixtureService", ["ngResource"]).factory("Fixture", function ($resource, $rootScope, $q, $filter) {
var resource = $resource("data.json");
var originallist =[];
var service = {
getData:function() {
var d = $q.defer();
resource.get(function(data) {
originallist = data.data.locationlist;
d.resolve(originallist);
});
return d.promise;
},
cityFilter:function(list, filtered) {
return $filter('filter')(list, {city:filtered});
},
getFilteredData: function(filtered) {
var self = this;
var d = $q.defer();
var list = []; // going to use for the filter
// you could check to see if we already have an originallist, just depends on if you want to cache that
self.getData().then(function(data){
list = self.cityFilter(originallist, filtered)
d.resolve(list);
});
return d.promise;
}
};
return service;
});
<body ng-controller="MainCtrl">
<h2>Filtered</h2>
<div ng-repeat='location in locations'>{{location.locationname}} is in {{location.city}}</div>
<h2>Unfiltered</h2>
<div ng-repeat='location in unfiltered'>{{location.locationname}} is in {{location.city}}</div>
<h2>Filtered with an ngRepeat Filter</h2>
<div ng-repeat='location in unfiltered | filter:{city:"Austin"}'>{{location.locationname}} is in {{location.city}}</div>
</body>