javascript - 多页面 Angularjs 应用架构

标签 javascript angularjs spring architecture client-side

<分区>

我有一个在后端使用 Spring,在前端使用 AngularJS 构建的项目。我有一个导航栏,其内容根据用户的登录状态而变化。它有四个 jsp 页面:

  • 索引页(已注销)
  • 关于页面(登录/注销)
  • 联系人页面(登录/注销
  • 服务页面(登录/注销
  • 产品页面(已登录)

还有额外的 jsp 文件:

  • 导航.jsp
  • nav-loggedin.jsp
  • nav-loggedout.jsp
  • login-popup.jsp

我使用 spring security 进行了身份验证,并拥有 jsp 文件,其中我使用 jSTL 标签根据身份验证和授权显示或隐藏按钮。

我在 nav-loggedin 和 out 之间切换如下:

<c:choose>
    <c:when test="${pageContext.request.userPrincipal.authenticated}">

        <tiles:insertAttribute name="nav-loggedin"/>

    </c:when>
    <c:otherwise>

        <tiles:insertAttribute name="nav-loggedout"/>

    </c:otherwise>
</c:choose>

我为每个页面以及导航栏和登录弹出窗口都有 javascript 文件:

  • index.js
  • about.js
  • 联系人.js
  • 服务.js
  • 产品.js
  • 导航.js
  • 登录.js

这是我的布局:

<div ng-app="app">
    <div ng-controller="NavController">
        <tiles:insertAttribute name="nav"/>
    </div>
    <div id="content" ng-controller="AppController">
        <tiles:insertAttribute name="content"/>
    </div>
    <div ng-controller="LoginController">
        <tiles:insertAttribute name="login-popup"/>
    </div>
</div>

...


<script type="text/javascript" src='<tiles:insertAttribute name="pageScript" ignore="true"/>'></script>
<script type="text/javascript" src='<c:url value="/static/main/js/nav.js"/>'></script>
<script type="text/javascript" src='<c:url value="/static/main/js/login.js"/>'></script>

我在这里放置了来自 tiles-definitions 文件的页面内容和脚本。

我的问题是代码量越来越大,超出了我们的预期,而且我想以纯客户端呈现的方式构建我的代码。

我想以推荐的方式重组所有客户端代码,其中每个 Controller 和服务都有不同的 js 文件。我知道 angular 更适合单页应用程序,但我想使用 angular 的功能。

您推荐哪些策略和架构来使该项目更易于维护和理解?

最佳答案

为了更好的可维护性和扩展性,您可能想尝试将 Spring JSP 转换为 RESTful Web Service并使用 Angular Resourcesinvoke calls到 API。

为了构建 Angular 应用程序,我喜欢基于功能的划分 (from a community-sourced best practices document)

├── app
│   ├── app.js
│   ├── common
│   │   ├── controllers
│   │   ├── directives
│   │   ├── filters
│   │   └── services
│   ├── home
│   │   ├── controllers
│   │   │   ├── FirstCtrl.js
│   │   │   └── SecondCtrl.js
│   │   ├── directives
│   │   │   └── directive1.js
│   │   ├── filters
│   │   │   ├── filter1.js
│   │   │   └── filter2.js
│   │   └── services
│   │       ├── service1.js
│   │       └── service2.js
│   └── about
│       ├── controllers
│       │   └── ThirdCtrl.js
│       ├── directives
│       │   ├── directive2.js
│       │   └── directive3.js
│       ├── filters
│       │   └── filter3.js
│       └── services
│           └── service3.js
├── partials
├── lib
└── test

关于javascript - 多页面 Angularjs 应用架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30943833/

相关文章:

javascript - Jquery 无法在 Windows 8 HTML5 应用程序中工作

javascript - 如何使用 jsdoc-toolkit 记录 jQuery-ui 小部件?

javascript - 如何在 wmd markdown 编辑器发布之前拦截和修改 markdown?

angularjs - 字段名称 "action"导致 alasql 导出到 Excel 出现问题

java - 在 Flume 生命周期中使用 Spring AMQP onMessage() 方法

javascript - D3 无法渲染简单的线条

javascript - Angular 解析: Variable is not defined

javascript - 当返回的数据集有限时,如何使用 Angular 1.6.5 递归调用 $http 请求

java - Spring - 仅当值不为空时才设置属性

java - 如何为该方法编写 AspectJ AOP 表达式?