14分布式电商项目 - 前端分层以及控制器继承

简介: 14分布式电商项目 - 前端分层以及控制器继承

代码下载地址:https://github.com/ylw-github/pingyougou.git

版本号:c98e409fba0faa91f8d6fdb94e30a2efc718d907

在上一章节完成的品牌管理的增删改查功能。但是我们看代码,JS 和 html 都放在一起,并不利于我们后期的维护。我们可以在前端代码中也运用 MVC 的设计模式,将代码进行分离,提高程序的可维护性。

自定义服务

AngularJS 中,服务是一个函数或对象,可在你的 AngularJS应用中使用。我们在上次课中使用了内置服务$http.其实我们也可以自己来定义服务,而服务会封装一些操作。我们在不同的控制器中可以调用同一个服务,这样服务的代码将会被重用。

我们现在就修改一下我们的品牌管理代码,使用自定义服务。

var app=angular.module('pinyougou', ['pagination']);//定义模块
//品牌服务层
app.service('brandService',function($http){
     //读取列表数据绑定到表单中
     this.findAll=function(){
       return $http.get('../brand/findAll.do');
      }
      //其它方法省略.......
}); 
//品牌控制层
app.controller('brandController' ,function($scope,brandService){
  //读取列表数据绑定到表单中 
  $scope.findAll=function(){
    brandService.findAll().success(
      function(response){
        $scope.list=response;
      }
  );
}
//其它方法省略........ 
});

代码分离

我们刚才已经将与后端交互的部分放入自定义服务,目的是不同的控制层都可以重复调用服务层方法。所以我们还需要将代码分离出来,以便调用。

1.前端基础层

在 pinyougou-manager-web 工程 js 下创建 base.js文件:

var app=angular.module('pinyougou',[]);

创建 base_pagination.js文件:

var app=angular.module('pinyougou',['pagination']);

一个用于不需要分页功能的页面,一个用于需要分页功能的页面.

2. 前端服务层

在 pinyougou-manager-web 工程 js 下创建 service 文件夹,创建 brandService.js:

//品牌服务层
app.service('brandService',function($http){
  //读取列表数据绑定到表单中
  this.findAll=function(){
    return $http.get('../brand/findAll.do');
}
//其它方法省略........ 
});
3.前端控制层

在 pinyougou-manager-web 的 js 文件夹下创建BrandController.java:

//品牌控制层
app.controller('brandController' ,function($scope,brandService){
 //读取列表数据绑定到表单中 
  $scope.findAll=function(){
    brandService.findAll().success(
        function(response){
            $scope.list=response;
        }
    );
  }
  //其它方法省略........ 
});
4.修改页面

去掉 brand.html 原来的 JS 代码,引入刚才我们建立的 JS。

<script type="text/javascript" src="../js/base_pagination.js"> </script>
<script type="text/javascript" src="../js/service/brandService.js"> </script>
<script type="text/javascript" src="../js/controller/brandController.js"> </script>

控制器继承

有些功能是每个页面都有可能用到的,比如分页,复选等等,如果我们再开发另一个功能,还需要重复编写。怎么能让这些通用的功能只写一次呢?我们通过继承的方式来实现。

1.建立父控制器

在 pinyougou-manager-web 的 js/controller 目录下建立 baseController.js:

//基本控制层
app.controller('baseController' ,function($scope){
   //重新加载列表 数据
    $scope.reloadList=function(){
     //切换页码 
     $scope.search( $scope.paginationConf.currentPage, $scope.paginationConf.itemsPerPage); 
   }
  //分页控件配置
  $scope.paginationConf = {
     currentPage: 1,
     totalItems: 10,
     itemsPerPage: 10,
     perPageOptions: [10, 20, 30, 40, 50],
     onChange: function(){
     $scope.reloadList();//重新加载
    }
  }; 
  $scope.selectIds=[];//选中的 ID 集合
  //更新复选
  $scope.updateSelection = function($event, id) {
    if($event.target.checked){//如果是被选中,则增加到数组
      $scope.selectIds.push( id);
    }else{
      var idx = $scope.selectIds.indexOf(id);
       $scope.selectIds.splice(idx, 1);//删除
    }
  }
}
);
2.修改品牌控制器层
//品牌控制层
app.controller('brandController' ,function($scope,$controller,brandService){
    $controller('baseController',{$scope:$scope});//继承,把 base 的 scope 域传递给子域
     //读取列表数据绑定到表单中 
    $scope.findAll=function(){
      brandService.findAll().success(
        function(response){
          $scope.list=response;
        }
      );
    } 
    //其它方法省略........
});

$controller也是 angular 提供的一个服务,可以实现伪继承,实际上就是与 BaseController 共享$scope

目录
相关文章
|
2月前
|
人工智能 前端开发 JavaScript
前端架构思考 :专注于多框架的并存可能并不是唯一的方向 — 探讨大模型时代前端的分层式微前端架构
随着前端技术的发展,微前端架构成为应对复杂大型应用的流行方案,允许多个团队使用不同技术栈并将其模块化集成。然而,这种设计在高交互性需求的应用中存在局限,如音视频处理、AI集成等。本文探讨了传统微前端架构的不足,并提出了一种新的分层式微前端架构,通过展示层与业务层的分离及基于功能的横向拆分,以更好地适应现代前端需求。
|
3月前
|
前端开发 JavaScript 定位技术
一、前端高德地图注册、项目中引入、渲染标记(Marker)and覆盖物(Circle)
文章介绍了如何在前端项目中注册并使用高德地图API,包括注册高德开放平台账号、引入高德地图到项目、以及如何在地图上渲染标记(Marker)和覆盖物(Circle)。
102 1
|
26天前
|
监控 前端开发 数据可视化
3D架构图软件 iCraft Editor 正式发布 @icraft/player-react 前端组件, 轻松嵌入3D架构图到您的项目,实现数字孪生
@icraft/player-react 是 iCraft Editor 推出的 React 组件库,旨在简化3D数字孪生场景的前端集成。它支持零配置快速接入、自定义插件、丰富的事件和方法、动画控制及实时数据接入,帮助开发者轻松实现3D场景与React项目的无缝融合。
100 8
3D架构图软件 iCraft Editor 正式发布 @icraft/player-react 前端组件, 轻松嵌入3D架构图到您的项目,实现数字孪生
|
2月前
|
JavaScript 前端开发 Docker
前端全栈之路Deno篇(二):几行代码打包后接近100M?别慌,带你掌握Deno2.0的安装到项目构建全流程、剖析构建物并了解其好处
在使用 Deno 构建项目时,生成的可执行文件体积较大,通常接近 100 MB,而 Node.js 构建的项目体积则要小得多。这是由于 Deno 包含了完整的 V8 引擎和运行时,使其能够在目标设备上独立运行,无需额外安装依赖。尽管体积较大,但 Deno 提供了更好的安全性和部署便利性。通过裁剪功能、使用压缩工具等方法,可以优化可执行文件的体积。
145 3
前端全栈之路Deno篇(二):几行代码打包后接近100M?别慌,带你掌握Deno2.0的安装到项目构建全流程、剖析构建物并了解其好处
|
1月前
|
前端开发 测试技术
前端工程化的分支策略要如何与项目的具体情况相结合?
前端工程化的分支策略要紧密结合项目的实际情况,以实现高效的开发、稳定的版本控制和顺利的发布流程。
27 1
|
1月前
|
前端开发 Unix 测试技术
揭秘!前端大牛们如何高效管理项目,确保按时交付高质量作品!
【10月更文挑战第30天】前端开发项目涉及从需求分析到最终交付的多个环节。本文解答了如何制定合理项目计划、提高团队协作效率、确保代码质量和应对项目风险等问题,帮助你学习前端大牛们的项目管理技巧,确保按时交付高质量的作品。
37 2
|
3月前
|
NoSQL Java Redis
面试官:项目中如何实现分布式锁?
面试官:项目中如何实现分布式锁?
100 6
面试官:项目中如何实现分布式锁?
|
2月前
|
前端开发 JavaScript 应用服务中间件
linux安装nginx和前端部署vue项目(实际测试react项目也可以)
本文是一篇详细的教程,介绍了如何在Linux系统上安装和配置nginx,以及如何将打包好的前端项目(如Vue或React)上传和部署到服务器上,包括了常见的错误处理方法。
726 0
linux安装nginx和前端部署vue项目(实际测试react项目也可以)
|
3月前
|
SpringCloudAlibaba JavaScript 前端开发
谷粒商城笔记+踩坑(2)——分布式组件、前端基础,nacos+feign+gateway+ES6+vue脚手架
分布式组件、nacos注册配置中心、openfegin远程调用、网关gateway、ES6脚本语言规范、vue、elementUI
谷粒商城笔记+踩坑(2)——分布式组件、前端基础,nacos+feign+gateway+ES6+vue脚手架
|
2月前
|
缓存 前端开发 JavaScript
前端架构思考:代码复用带来的隐形耦合,可能让大模型造轮子是更好的选择-从 CDN 依赖包被删导致个站打不开到数年前因11 行代码导致上千项目崩溃谈谈npm黑洞 - 统计下你的项目有多少个依赖吧!
最近,我的个人网站因免费CDN上的Vue.js包路径变更导致无法访问,引发了我对前端依赖管理的深刻反思。文章探讨了NPM依赖陷阱、开源库所有权与维护压力、NPM生态问题,并提出减少不必要的依赖、重视模块设计等建议,以提升前端项目的稳定性和可控性。通过“left_pad”事件及个人经历,强调了依赖管理的重要性和让大模型代替人造轮子的潜在收益
下一篇
DataWorks