AngularJS购物车模糊查询,表头排序,增删改查

本文介绍了一个使用AngularJS实现的购物车应用案例,包括商品筛选、排序、批量删除等功能,并详细展示了如何通过AngularJS指令和服务来操作DOM及管理数据。


<!DOCTYPE html>
<html>


<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript" src="js/angular.js"></script>
<script>
var app = angular.module("myApp", []);
app.controller("myCtrl", function($scope) {
$scope.goods = [{
"id": 10,
"name": "iPhone",
"price": 5400,
state: false
}, {
"id": 20,
"name": "ipad mini",
"price": 2200,
state: false
}, {
"id": 30,
"name": "ipad air",
"price": 2340,
state: false
}, {
"id": 40,
"name": "ipad",
"price": 1420,
state: false
}, {
"id": 50,
"name": "imac",
"price": 15400,
state: false
}];


//点击列明进行排序
$scope.orderFlag = "";
$scope.orderLine = "id";
$scope.orderProduct = function(line) {
$scope.orderLine = line;
if($scope.orderFlag == "") {
$scope.orderFlag = "-";
} else {
$scope.orderFlag = "";
}
}
//下拉菜单删选商品价格、
$scope.productPrice = "--请选择--";
$scope.ifShow = function(price) {
if($scope.productPrice == "--请选择--") {
return true;
} else {
var arr = $scope.productPrice.split("~");
var priceMin = arr[0];
var priceMax = arr[1];
if(price < priceMin || price > priceMax) {
return false;
} else {
return true;
}
}
}


//点击删除按钮,删除当前商品
$scope.delProduct = function(delName) {
for(index in $scope.goods) {
if(delName == $scope.goods[index].name) {
$scope.goods.splice(index, 1);
} else {
}
}
}
//定义下拉菜单排序规则
$scope.selOrder;
$scope.orderSel = function() {
if($scope.selOrder == "id") {
$scope.orderFlag = "";
$scope.orderLine = "id";
} else if($scope.selOrder == "-id") {
$scope.orderFlag = "-";
$scope.orderLine = "id";
} else if($scope.selOrder == "price") {
$scope.orderFlag = "";
$scope.orderLine = "price";
} else if($scope.selOrder == "-price") {
$scope.orderFlag = "-";
$scope.orderLine = "price";
};
}


$scope.updatePrice = function(price) {
//获得价格
for(index in $scope.goods) {
if(price == $scope.goods[index].price) {
//修改价格
var result = parseInt(window.prompt("清输入要修改的价格", price));
//在这之前对result的结果进行非字符串判断
if(result < 0) {
alert("输入有误,请重新更改");
} else {
if(window.confirm("确定要将" + $scope.goods[index].name + "的价格更改为:" + result + "吗?")) {
$scope.goods[index].price = result;
};
}

}
}


//全选、全不选
$scope.selectAll = false;
$scope.selectAllFun = function() {
if($scope.selectAll) {
for(index in $scope.goods) {
$scope.goods[index].state = true;
}
} else {
for(index in $scope.goods) {
$scope.goods[index].state = false;
}
}
}
//反选
$scope.checkSelecetAll = function() {
var flag = false;
//遍历数组,获得对象的状态
for(index in $scope.goods) {
//如果有一个对象状态是false即未选中状态,就把标志位flag变为true。
if(!$scope.goods[index].state){
flag = true;
}
}
//判断是否没有一个是未选中状态
if(flag){//这是正面至少有一个未选中
$scope.selectAll = false;//全选状态为false
}else{//一定是全部被选中
$scope.selectAll = true;//全选状态为true
}
}

//批量删除
$scope.delSelect = function(){
//自己添加选中状态判断,就是有没有一个都没选中的情况。

//定义一个空数组,盛放状态是选中的对象
var isSelected = [];
//遍历数组,通过数组对象的状态,判断是否删除当前遍历的对象
for(index in $scope.goods) {
//如果遍历的当前对象状态为true,则删除
if($scope.goods[index].state){
//把当前选中的对象,一个个追加到isSelected数组中。
isSelected.push($scope.goods[index]);
//alert(isSelected.length);
}
}

//遍历isSelected数组,因为isSelected数组中存放的是所有选中项的对象。
for(index in isSelected){
var name = isSelected[index].name;
for(index2 in $scope.goods){
if(name == $scope.goods[index2].name){
$scope.goods.splice(index2,1);
}
}
}
}


});
</script>
</head>


<body ng-app="myApp" ng-controller="myCtrl">
<center>
<h2>我的购物车</h2>
<input type="text" placeholder="产品名称" ng-model="search" /> 产品价格
<select ng-model="productPrice">
<option>--请选择--</option>
<option>0~1000</option>
<option>1001~2000</option>
<option>2001~3000</option>
<option>3001~4000</option>
<option>4001~5000</option>
<option>5001~6000</option>
<option>6001~无穷大</option>
</select>
<select ng-model="selOrder" ng-change="orderSel()">
<option value="">排序方式</option>
<option value="id">id正序</option>
<option value="-id">id逆序</option>
<option value="price">价格正序</option>
<option value="-price">价格逆序</option>
</select>
<button ng-click="delSelect()">批量删除</button>
<br /><br />
<table border="1px solid black" cellpadding="20" cellspacing="0">
<tr>
<th><input type="checkbox" ng-model="selectAll" ng-click="selectAllFun()" /> </th>
<th ng-click="orderProduct('id')">产品编号</th>
<th ng-click="orderProduct('name')">产品名称</th>
<th ng-click="orderProduct('price')">产品价格</th>
<th>操作</th>
</tr>
<tr ng-repeat="good in goods | filter:{'name':search} | orderBy:(orderFlag+orderLine)" ng-if="ifShow(good.price)">
<td><input type="checkbox" ng-model="good.state" ng-click="checkSelecetAll()" /> </td>
<td>{{good.id}}</td>
<td>{{good.name}}</td>
<td>{{good.price}}</td>
<td>
<button ng-click="delProduct(good.name)">删除</button>
<button ng-click="updatePrice(good.price)">修改</button>
</td>
</tr>
</table>
</center>
</body>


</html>
内容概要:本文详细记录了对一个Android ARM64静态ELF文件中字符串加密机制的逆向分析过程。该ELF文件的所有字符串均被加密,无法通过常规strings命令或IDA直接识别。作者通过分析发现,加密字符串存储在.rodata段,其解密所需信息(包括密文地址、长度和16位密钥)保存在.data.rel.ro段的40字节描述符中。核心解密函数sub_10F408采用自反的双pass流密码算法,结合固定密钥KEY_TERM(由.data段24字节数据计算得出),实现字节级非线性、位置与长度相关的加密。文章还复现了完整的Python解密脚本,并揭示了该保护机制的本质为代码混淆而非强加密,最终成功批量解密全部956条字符串,暴露程序真实行为,如shell命令模板、设备标识篡改、网络重置等操作。此外,文中还提及未启用的自定义壳框架及其反dump设计。; 适合人群:具备逆向工程基础的安全研究人员、二进制分析人员及对ELF保护技术感兴趣的开发者。; 使用场景及目标:①学习ELF二进制中字符串加密的典型实现方式与逆向突破口;②掌握从结构识别、函数追踪到算法还原的完整逆向流程;③理解“绑定二进制”的完整性校验设计及其局限性;④实践编写IDAPython脚本自动化提取与解密敏感数据。; 阅读建议:此资源以实战案例驱动,不仅展示技术细节,更强调逆向思维与验证方法,建议读者结合IDA调试环境,逐步跟随文中步骤进行动态分析与算法验证,深入理解每一步的推理依据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值