我制作了小型营销应用程序,用户可以在其中选择用于投放广告的屏幕。 接下来是流程,用户选择日期范围,并从API获取具有可用展示次数的所有免费屏幕。用户选择屏幕并将其添加到购物车。每个屏幕都包含具有可用印象的数据。
这是购物车表
|ID | Available impressions (input) |
|1000 | 5000 |
|1004 | 7855 |
|1098 | 9688 |
|1111 | 1022 |
total: 23565 (input field)
这像我期望的那样工作,这没关系,我将其发布到API后一切正常。
代码:
<table>
<thead>
<tr>
<th>Id</th>
<th>Available impressions</th>
</tr>
</thead>
<tboda>
<tr ng-repeat="item in myCartItems | unique: 'id'">
<td>item.id</td>
<td><input type="number" ng-model="item.available_imp" ng-blur="sendCustomSelectedImpressions(item.id, item.available_imp)" ng-max="item.available_imp"</td>
</tr>
</tbody>
</table>
然后我将这些数据推送到数组
$scope.sendCustomSelectedImpressions = function(id, numberOfImpressions){
$scope.myCartItems.push({
'id': id,
'campaignImpressions': numberOfImpressions
});
}
问题1
问题是如果我们在印象中连续输入新值,并且在发送到API之前,再次输入新值,那么在json中,我不会只获得新值,而是会获得之前输入的所有值,就像在JSON中一样波纹管
{"campaign_items": [
{"id": 1000, "impressions": 5000},//duplicate, this is initial, i don't need this, i need new
{"id": 1004, "impressions": 7855},
{"id": 1098, "impressions": 9688},
{"id": 1111, "impressions": 1022},
{"id": 1000, "impressions": 6000}, //duplicate, when i try to input another number
{"id": 1000, "impressions": 4561}, //i only need this last i entered
]}
如何仅获取我在提交之前输入的输入,而之前没有所有输入,没有重复?
问题2
对于这个问题,我仍然没有任何代码,因为我需要这样做,但是我需要逻辑方面的帮助。
如果看表示例,您将看到TOTAL
也为输入字段。
加载ng-table后,我会连续汇总所有展示并显示总计。没关系。
每个屏幕都有一个不同的最大总数,例如,如果我在总数字段中输入另一个数字,而不是23565
,则输入较低的数字19000
,我需要平均添加到所有选定的屏幕中。这里的问题是,具有ID 1111
的屏幕仅具有1022
的印象,但是具有ID 9688
的屏幕具有9688
的印象。
对我来说,解决方案是计算更改初始sum
数量的百分比,当我得到结果时,每屏印象减少相同的百分比。如果有人有其他解决方案,或者对代码有任何想法,请与我们分享。
再次感谢
答案 0 :(得分:2)
对于第一个问题,可以在推送新数据之前删除具有该ID的对象。假设您可以使用filter
函数(否则需要循环)。这样,您将删除要在下一个push
语句中推送的ID。
$scope.sendCustomSelectedImpressions = function(id, numberOfImpressions){
$scope.myCartItems = $scope.myCartItems.filter(item => item.id !== id);
$scope.myCartItems.push({
'id': id,
'campaignImpressions': numberOfImpressions
});
}
答案 1 :(得分:0)
我认为对于问题1 ,您可能不需要推送新值,而只需更新$ scope.myCartItems。
$scope.sendCustomSelectedImpressions (id, numberOfImpressions) {
if (!numberOfImpressions) return; // Check, if input is not empty (not undegined or null)
$scope.myCartItems[id - 1].impressions = numberOfImpressions; // change existing object items
};
我用示例(Angularjs + ES6)制作了一个简单的stackbltz应用程序。希望对您有所帮助:)
https://stackblitz.com/edit/angularjs-tn1zs9?embed=1&file=home/home.controller.js