29分布式电商项目 - 商品录入(三级联动菜单)

简介: 29分布式电商项目 - 商品录入(三级联动菜单)

需求分析

在商品录入界面实现商品分类的选择(三级分类)效果如下:

当用户选择一级分类后,二级分类列表要相应更新,当用户选择二级分类后,三级列表要相应更新。

后端代码

在 pinyougou-shop-web 工程中创建 ItemCatController.

@RestController
@RequestMapping("/itemCat")
public class ItemCatController {
@Reference
private ItemCatService itemCatService;
  /**
  * 根据上级 ID 查询列表
  * @param parentId
  * @return
  */
  @RequestMapping("/findByParentId")
  public List<TbItemCat> findByParentId(Long parentId){
    return itemCatService.findByParentId(parentId);
  }
  /**
  * 获取实体
  * @param id
  * @return
  */
  @RequestMapping("/findOne")
    public TbItemCat findOne(Long id){
    return itemCatService.findOne(id);
  }
}

前端代码

1.构建服务层

创建 item_catService.js

//服务层
app.service('itemCatService',function($http){ 
  //根据上级 ID 查询下级列表
  this.findByParentId=function(parentId){
    return $http.get('../itemCat/findByParentId.do?parentId='+parentId);
  }
  //查询实体
  this.findOne=function(id){
    return $http.get('../item/findOne.do?id='+id);
  }  
});

修改 goodsController.js,引入 itemCatService

//控制层
app.controller('goodsController' ,function($scope,$controller,goodsService,itemCatService ){

修改 goods_edit.html,添加引用

<script type="text/javascript" src="../js/base.js"> </script>
<script type="text/javascript" src="../js/service/goodsService.js"> </script>
<script type="text/javascript" src="../js/service/itemCatService.js"> </script>
<script type="text/javascript" src="../js/controller/baseController.js"> </script>
<script type="text/javascript" src="../js/controller/goodsController.js"> </script>
2.一级分类下拉选择框

在 goodsController 增加代码

//读取一级分类
$scope.selectItemCat1List=function(){
   itemCatService.findByParentId(0).success(
     function(response){
      $scope.itemCat1List=response;
      }
    );
}

修改 goods_edit.html 一级分类下拉选择框

<select class="form-control" ng-model="entity.goods.category1Id" ng-options="item.id 
as item.name for item in itemCat1List"></select>

注意:ng-options 是新的指令,用来循环获取下拉列表.

3.二级分类下拉选择框

在 goodsController 增加代码:

//读取二级分类
$scope.$watch('entity.goods.category1Id', function(newValue, oldValue) { 
 //根据选择的值,查询二级分类
   itemCatService.findByParentId(newValue).success(
     function(response){
     $scope.itemCat2List=response; 
   }
   ); 
});

$watch 用于监控某个变量的值,当被监控的值发生变化,就自动执行相应的函数。

修改 goods_edit.html 中二级分类下拉框

<select class="form-control select-sm" ng-model="entity.goods.category2Id"ng-options="item.id as item.name for item in itemCat2List"></select>
4.三级分类下拉选择框

在 goodsController 增加代码

//读取三级分类
$scope.$watch('entity.goods.category2Id', function(newValue, oldValue) { 
   //根据选择的值,查询二级分类
   itemCatService.findByParentId(newValue).success(
     function(response){
     $scope.itemCat3List=response; 
   }
   ); 
});

修改 goods_edit.html 中三级分类下拉框

<select class="form-control select-sm" ng-model="entity.goods.category3Id" ng-options="item.id as item.name for item in itemCat3List"></select>
5.读取模板 ID

在 goodsController 增加代码

//三级分类选择后 读取模板 ID
 $scope.$watch('entity.goods.category3Id', function(newValue, oldValue) { 
   itemCatService.findOne(newValue).success(
   function(response){
     $scope.entity.goods.typeTemplateId=response.typeId; //更新模板 ID 
     }
   );
 });

在 goods_edit.html 显示模板 ID

模板 ID:{{entity.goods.typeTemplateId}}



目录
相关文章
|
6月前
|
NoSQL 调度 Redis
19- 你的项目中哪里用到了分布式锁
在一个项目中,为解决集群环境下SpringTask定时任务的重复执行问题,采用了Redis实现分布式锁来管理任务调度,防止资源浪费。后来因任务量和执行规则增加,以及单节点效率限制,系统改用XXL-JOB,分布式锁不再使用。
68 2
|
2月前
|
NoSQL Java Redis
面试官:项目中如何实现分布式锁?
面试官:项目中如何实现分布式锁?
84 6
面试官:项目中如何实现分布式锁?
|
3月前
|
资源调度 Java 调度
项目环境测试问题之Schedulerx2.0通过分布式分片任务解决单机计算瓶颈如何解决
项目环境测试问题之Schedulerx2.0通过分布式分片任务解决单机计算瓶颈如何解决
项目环境测试问题之Schedulerx2.0通过分布式分片任务解决单机计算瓶颈如何解决
|
3月前
|
存储 缓存 开发框架
看看 Asp.net core Webapi 项目如何优雅地使用分布式缓存
看看 Asp.net core Webapi 项目如何优雅地使用分布式缓存
|
4月前
|
SQL NoSQL Java
如何在Java项目中实现分布式锁
如何在Java项目中实现分布式锁
|
4月前
|
消息中间件 Java 中间件
如何在Java项目中实现分布式事务管理
如何在Java项目中实现分布式事务管理
|
6月前
|
XML NoSQL Java
Java单体项目和分布式项目中的锁
Java单体项目和分布式项目中的锁 Java单体项目和分布式项目中的锁
85 2
|
24天前
|
NoSQL Java Redis
太惨痛: Redis 分布式锁 5个大坑,又大又深, 如何才能 避开 ?
Redis分布式锁在高并发场景下是重要的技术手段,但其实现过程中常遇到五大深坑:**原子性问题**、**连接耗尽问题**、**锁过期问题**、**锁失效问题**以及**锁分段问题**。这些问题不仅影响系统的稳定性和性能,还可能导致数据不一致。尼恩在实际项目中总结了这些坑,并提供了详细的解决方案,包括使用Lua脚本保证原子性、设置合理的锁过期时间和使用看门狗机制、以及通过锁分段提升性能。这些经验和技巧对面试和实际开发都有很大帮助,值得深入学习和实践。
太惨痛: Redis 分布式锁 5个大坑,又大又深, 如何才能 避开 ?
|
3月前
|
NoSQL Redis
基于Redis的高可用分布式锁——RedLock
这篇文章介绍了基于Redis的高可用分布式锁RedLock的概念、工作流程、获取和释放锁的方法,以及RedLock相比单机锁在高可用性上的优势,同时指出了其在某些特殊场景下的不足,并提到了ZooKeeper作为另一种实现分布式锁的方案。
103 2
基于Redis的高可用分布式锁——RedLock
|
3月前
|
缓存 NoSQL Java
SpringBoot整合Redis、以及缓存穿透、缓存雪崩、缓存击穿的理解分布式情况下如何添加分布式锁 【续篇】
这篇文章是关于如何在SpringBoot应用中整合Redis并处理分布式场景下的缓存问题,包括缓存穿透、缓存雪崩和缓存击穿。文章详细讨论了在分布式情况下如何添加分布式锁来解决缓存击穿问题,提供了加锁和解锁的实现过程,并展示了使用JMeter进行压力测试来验证锁机制有效性的方法。
SpringBoot整合Redis、以及缓存穿透、缓存雪崩、缓存击穿的理解分布式情况下如何添加分布式锁 【续篇】

热门文章

最新文章