这让我很疯狂,因为我确信这很简单,但我在过去的两天里尝试了多种不同的方法,没有任何方法可以正常运作。
我的视图HTML中有两个选择下拉列表:
<p>Spend between
<select
id ='minSpend'
ng-model ="cheapest"
ng-options="offer.PriceAUD as '$'+Math.round(offer.PriceAUD) for offer in offers | uniquePrice:'PriceAUD'">
</select>
and
<select
id ='maxSpend'
ng-model ="dearest"
ng-options="offer.PriceAUD as '$'+Math.round(offer.PriceAUD) for offer in offers | uniquePrice:'PriceAUD'" >
</select>
一旦收到数据,它们就可以很好地填充唯一值。 uniquePrice过滤器如下所示:
app.filter('uniquePrice', function() {
return function(input, key) {
if (typeof input == 'undefined'){return;}
var unique = {};
var uniqueList = [];
for(var i = 0; i < input.length; i++){
if(typeof unique[input[i][key]] == "undefined"){
unique[input[i][key]] = "";
input[i][key] = Math.round(input[i][key]);
uniqueList.push(input[i]);
}
}
return uniqueList;
};
});
我最喜欢的是最初选择的最低价格和最高价格。我设法编写了一个fn来实现它&#34;点击&#34;:
$scope.setValues = function(){
$scope.cheapest = $scope.offers[0].PriceAUD;
$scope.dearest = $scope.offers[ $scope.offers.length-1].PriceAUD;
}
[$ scope.offers来自按PriceAUD ASC排序的数据库]
通过简单的HTML触发:
<button ng-click="setValues()">Set Values</button>
哪个工作正常。但是,如何在数据加载完成后触发此操作?我试过了:
$scope.offers = Items.query();
$scope.offers.$promise.then(function (result) {
$scope.setValues();
});
但它不起作用。 当我在控制器中直接设置$ scope.dearest = $ scope.offers [0] .PriceAUD时,它不起作用,因为承诺没有得到解决。我确定我只需要把它放在正确的位置,但在哪里? 谢谢你的帮助。
编辑:获取项目的代码:
var appServices = angular.module('appServices', ['ngResource']);
appServices.factory('Items', ['$resource',
function($resource){
var url = '/api/get/offers.json';
var paramDefaults = {};
var actions = "{ query: {method:'GET', params:{id:'Items'}, isArray:true}";
var optns = '';
return $resource(url, paramDefaults, actions , optns);
}]);