根据过期日期删除角度数组
Angular Array Remove Based on Expiration Date
我有一个表单需要进行特定的验证。我有两个下拉列表,显示相同的数据(在这种情况下是带有截止日期的促销代码(。。
所以我的第一个下拉列表是促销代码:
<div class="input-group col-sm-12 col-md-12 col-lg-12">
<span style="min-width: 150px;" class="input-group-addon promo-select">Select Promo Code</span>
<select id="offer_promo" name="offer_promo" class="form-control" ng-change="promoAction()"
ng-model="promo"
ng-options="p.Promo_ID as p.Promo_Code + ' ( ' + p.Promo_Description + ' )' for p in promos">
<option value="">Please Select A Promotion</option>
</select>
</div>
所以我的第二个下拉列表是附加促销代码:
<div data-ng-show="(offer.is_primary === 1)" class="input-group col-sm-12 col-md-12 col-lg-12">
<span class="input-group-addon">Additional Code</span>
<select ng-disabled="additionalCodeDisabled" id="offer_promo_add" name="offer_promo_add" class="form-control" ng-model="addPromo"
ng-options="p.Promo_Code as p.Promo_Code + ' ( ' + p.Promo_Description + ' )' for p in addPromos"></select>
</div>
这是我在promoAction:中调用的过滤器控制器
$scope.promoFilter = function() {
function promosFilteredBy(date) {
var filteredPromos = $scope.addPromos.filter(function(addPromos) {
console.log(filteredPromos);
var promoDate = new Date($scope.promo_expiration);
return promoDate < date;
});
return filteredPromos;
}
var selectedPromoDate = new Date($scope.promo_expiration);
$scope.addPromos = promosFilteredBy(selectedPromoDate);
};
在我的控制器中,我得到了一个空白数组或filteredPromos的未定义数组。所以过滤功能没有正常运行,我不确定我在哪里错过了它
我的问题是,当用户在第一个下拉列表中选择促销代码时,它会根据您选择的内容有一个特定的过期代码。所以我想删除附加促销代码中的所有代码,也就是高于的第二次下拉代码。我不能使用.slice((,因为它们不是按时间顺序排列的。我使用momment.js作为日期,因此可能希望使用.isBefore((来比较日期。
所以我给你举个例子,我在第一个下拉列表中选择promo_code"25ANC"promo_expiration:"01/30/2017"。现在,附加促销下拉列表中超过该日期的任何内容都应该从下拉列表中删除。
我目前有一个$watch功能,正在观看促销和addPromo的ng模型。我知道我需要创建一个函数,将不符合日期验证的促销代码切片。但是,我应该如何创建该函数,以及应该在哪里具体调用该函数?
如果我缺少代码的任何部分,请告诉我我可以提供。
您肯定想要绑定到ng-change
函数,但可能只在第一个下拉列表中(b/c从第一个下拉列表中选择是为第二个下拉列表筛选促销的触发器(。
这是一个plunker
将ng-options
更改为p
而不仅仅是p.Promo_ID
将把完整的促销对象绑定到ng-model
,这意味着我们可以用$scope.promo.Promo_EXP
访问选定的促销到期日期,并将其他促销日期与之进行比较。
您会注意到,第二个下拉列表绑定到一个范围变量additionalPromos
,该变量是在$scope.promoAction()
中创建的,基本上只是一个经过过滤的"有效"促销的数组(也就是日期小于您在第一个下拉列表中选择的日期的促销(。
我还没有看到你的完整实现,所以它可能不适合100%,但希望它能有所帮助。
所以我找到了一个使用momentjs比较两者的方法。我浏览了宣传片,然后返回了过滤器提供的内容,并将其作为addPromos。
$scope.promoFilter = function(promo_expiration) {
function promosFilteredBy(promo_expiration) {
return $scope.promos.filter(function(promo) {
return moment(promo_expiration).isBefore(promo.Expiration_Date);
});
}
$scope.addPromos = promosFilteredBy(promo_expiration);
};
- 从组件状态的数组中删除元素
- Mongoose-在更新中删除数组元素
- 从数组中删除元素的最佳方法是:javascript/jquery
- 添加和删除隐藏字段数组中的值,而不提交表单
- 从数组中删除重复条目,并在javascript中按顺序排列
- 一些元素没有从数组中删除
- 删除JS数组中的最小数字
- 从数组中删除三元组项
- 删除重复的数组值,然后存储它们[反应]
- 在特定索引处剥离/删除数组中的值
- 数组删除重复结果Javascript
- 字符串替换或通过数组删除
- js中的对象数组:删除重复项
- KnockoutJS.Mapping.FromJS-可观察数组-删除不起作用
- 用于垃圾收集的Javascript数组删除
- 为什么”——数组.删除数组的最后一个元素
- PHP循环通过脚本数组&删除项目
- 谷歌地图API:试图使用数组删除多个标记
- 带有for循环+条件的Javascript数组删除不必要的元素
- 在JavaScript中管理像ArrayList这样的数组:删除一个元素并关闭创建的间隙