十六、一个 angular 应用应当如何良好地分层?

目录结构的划分

1、对于小型项目,可以按照文件类型组织,比如:

css

Js  {

 controllers

 models

 services

 filters

   }

templates

2、但是对于规模较大的项目,最好按业务模块划分,比如:

css

Modules

  account

  controllers

  models

  services

  filters

  templates

 disk

  controllers

  models

  services

  filters

  templates

modules 下最好再有一个 common 目录来存放公共的东西。

3.逻辑代码的拆分

作为一个 MVVM 框架,Angular 应用本身就应该按照 模型,视图模型(控制器),视图来划分。

这里逻辑代码的拆分,主要是指尽量让 controller 这一层很薄。提取共用的逻辑到 service 中 (比如后台数据的请求,数据的共享和缓存,基于事件的模块间通信等),提取共用的界面操作到 directive 中(比如将日期选择、分页等封装成组件等),提取共用的格式化操作到 filter 中等等。

在复杂的应用中,也可以为实体建立对应的构造函数,比如硬盘(Disk)模块,可能有列表、新建、详情这样几个视图,并分别对应的有 controller,那么可以建一个 Disk 构造函数,里面完成数据的增删改查和验证操作,有跟 Disk 相关的 controller,就注入 Disk 构造器并生成一个实例,这个实例就具备了增删改查和验证方法。这样既层次分明,又实现了复用(让 controller 层更薄了)。

十七、angular 应用常用哪些路由库,各自的区别是什么?

Angular1.x 中常用 ngRoute 和 ui.router,还有一种为 Angular2 设计的 new router (面向组件)。后面那个没在实际项目中用过,就不讲了。

无论是 ngRoute 还是 ui.router,作为框架额外的附加功能,都必须以 模块依赖 的形式被引入。

区别

ngRoute 模块是 Angular 自带的路由模块,而 ui.router 模块是基于 ngRoute模块开发的第三方模块。

ui.router 是基于 state (状态)的, ngRoute 是基于 url 的,ui.router模块具有更强大的功能,主要体现在视图的嵌套方面。

使用 ui.router 能够定义有明确父子关系的路由,并通过 ui-view 指令将子路由模版插入到父路由模板的 <div ui-view></div> 中去,从而实现视图嵌套。而在 ngRoute 中不能这样定义,如果同时在父子视图中 使用了 <div ng-view></div> 会陷入死循环。

示例

// ngRoute

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

app.config(function($routeProvider){

  $routeProvider

    .when('/main', {

      templateUrl: "main.html",

      controller: 'MainCtrl'

    })

    .otherwise({ redirectTo: '/tabs' });

// ui.router

var app = angular.module("uiRouteApp", ["ui.router"]);

app.config(function($urlRouterProvider, $stateProvider){

  $urlRouterProvider.otherwise("/index");

  $stateProvider

    .state("Main", {

      url: "/main",

      templateUrl: "main.html",

      controller: 'MainCtrl'

    })

 

十八、如果通过angular的directive规划一套全组件化体系,可能遇到哪些挑战?

件如何与外界进行数据的交互,以及如何通过简单的配置就能使用吧。

十九、分属不同团队进行开发的 angular 应用,如果要做整合,可能会遇到哪些问题,如何解决?

可能会遇到不同模块之间的冲突。

比如一个团队所有的开发在 moduleA 下进行,另一团队开发的代码在 moduleB 下

angular.module('myApp.moduleA', [])

  .factory('serviceA', function(){

    ...

  })

angular.module('myApp.moduleB', [])

  .factory('serviceA', function(){

    ...

  }) 

angular.module('myApp', ['myApp.moduleA', 'myApp.moduleB'])

会导致两个 module 下面的 serviceA 发生了覆盖。

貌似在 Angular1.x 中并没有很好的解决办法,所以最好在前期进行统一规划,做好约定,严格按照约定开发,每个开发人员只写特定区块代码。

转载于:https://www.cnblogs.com/ndos/p/8331685.html

Angular面试题三相关推荐

  1. angular面试题及答案_关于最流行的Angular问题的StackOverflow上的48个答案

    angular面试题及答案 by Shlomi Levi 通过Shlomi Levi 关于最流行的Angular问题的StackOverflow上的48个答案 (48 answers on Stack ...

  2. 剑指offer 面试题三 找出数组中重复的数字

    1 import org.junit.Test; 2 3 import java.util.Arrays; 4 import java.util.HashSet; 5 6 public class D ...

  3. java三级考试题库_JAVA题库:格林模拟试题三(下)

    JAVA题库:格林模拟试题三(下) 分类:计算机等级 | 更新时间:2016-07-08| 来源:转载 Question 31) Which of the following statements a ...

  4. mysql保存为vna文件_微机 模拟试题三(含答案)

    模拟试题三 一.单项选择题(每小题1分,共20分) 1.如某存储器分段时,一个段最多允许16K个字单元,那么表示一个段内偏移地址的二进制位数至少是()位. A.15 B.16 C.17 D.18 2. ...

  5. 计算机自动化程序高 应用范围广是由于,计算机等级考试一级笔试模拟试题(三)及答案...

    计算机等级考试一级笔试模拟试题(三) 第一卷必做模块 必做模块一计算机基础知识(每项1.5分,14项,共21分) 一. 计算机的自动化程度高.应用范围广是由于.目前的计算机所使用的电子元器件是. 1. ...

  6. 2013年计算机试题(三),2013年计算机等级考试(一级Ms Office)经典试题(三)及答案...

    2013年计算机等级考试(一级Ms Office)经典试题(三)及答案,更多计算机等级考试报名.报考条件.考试时间和历年真题,请访问计算机等级考试网(http://www.etest8.com/den ...

  7. Python面试题(三)

    python面试题三 Python中类方法.类实例方法.静态方法有何区别 动态获取和设置对象的属性 Python的内存管理机制及调优手段 内存泄露是什么?如何避免 map函数和reduce函数 pri ...

  8. 软考 软件设计师 下午题-试题三 历年真题

    依赖是虚线,关联是实线 21年下半年真题 补充用例图,他就是参与者与用例之间的关系,比如用户执行某些事情 一个句号一个功能 建立迷宫是一般的用例,便血迷宫文件和导入*迷宫文件是特殊的用例 记住一句话 ...

  9. php yii框架面试题,php面试题三之yii2和yii的不一样的地方

    这篇文章介绍的内容是关于php面试题三之yii2和yii的不一样的地方,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 1.在Yii 2.0中已经使用Comsoper来管理各种依赖关系, ...

最新文章

  1. 模型不work怎么办?141页PPT告诉你怎么改模型
  2. php 订单状态描述,获取不同状态订单列表
  3. amd为什么还用针脚_为什么AMD不取消cpu上的针脚?
  4. 误差error,偏置bias,方差variance的见解
  5. 使用structure101分析软件包的依赖关系
  6. contains()+replaceFirst()进行substring计数(洛谷P3741题题解,Java语言描述)
  7. iPhone 13系列又有新配色:猛男必看!
  8. ‘adb‘ 不是内部或外部命令and Error while executing: am start -n解决
  9. python绘图坐标轴|刻度值|刻度||标题设置
  10. 新起点、新目标--获得MVP后的感悟
  11. linux下addr2line详解
  12. 大橙子主题vfed3.15模板
  13. 《裸辞后,降薪找工作》
  14. OpenFPGA系列(四) OpenFPGA 架构描述文件和仿真配置文件
  15. php 姓氏表,php 根据姓氏笔画排序怎么做
  16. 制作Win7多合一原版系统光盘镜像
  17. 关于bp抓包挂代理127.0.0.1服务器出现“有软件正在阻止Firefox安全连接至网站”问题的解决方法
  18. 阿里巴巴资深算法专家刘忠义:聚星台——客户运营核心大数据与算法技术
  19. 已知某分页系统,主存容量为 64K 字节,页面大小为 1K,对一个 4 页大的作 业,其 0、1、2、3 页分别被分配到主存的 2、4、6、7 块中,试:将十进制的逻 辑地址 1023、2500、35
  20. 将SQL导入JAVA的后续操作

热门文章

  1. GCC编译过程以及对应FILE文件表
  2. fork与操作文件的系统调用问题
  3. java下拉文本框_java swing 下拉框与文本框
  4. mysql b tree图_MySQL索引--B-Tree(B+Tree)图文详解
  5. html 数据库 编写学生表,用sql语句创建学生表如何做
  6. Java线程:线程的调度-优先级
  7. mysql多表关联更新
  8. Jmeter+ant运行脚本,得到HTML报告
  9. 吃货莫跑小小程序冲刺07
  10. python,面向对象的各种方法