02
2020
06

. $apply()和$digest()的区别

安全性:$apply()可以接收一个参数作为function(),这个function会被包装到一个try…catch块中,所以一旦有异常发生,该异常会被$exceptionHandler service处理。$apply会使ng进入$digest cycle ,并从$rootScope开始遍历(深度优先)检查数据变更。$digest仅会检查该scope和它的子scope,当你确定当前操作仅影响它们时,用$digest可以稍微提升性能。
02
2020
06

angular的缺点有哪些?

1.强约束导致学习成本较高,对前端不友好。但遵守AngularJS的约定时,生产力会很高,对Java程序员友好。2.不利于SEO因为所有内容都是动态获取并渲染生成的,搜索引擎没法爬取。一种解决办法是,对于正常用户的访问,服务器响应AngularJS应用的内容;对于搜索引擎的访问,则响应专门针对SEO的HTML页面。3..性能问题作为MVVM框架,因为实现了数据的双向绑定,对于大数组、复杂对象会存在性能问题。可以用来优化Angular应用的性能 的办法:减少监控项(比如对不会变化的数据采用单向绑定
02
2020
06

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

可能会遇到不同模块之间的冲突。比如一个团队所有的开发在moduleA下进行,另一团队开发的代码在moduleB下angular.module('myApp.moduleA', []).factory('serviceA', function(){...})angular.module('myApp.moduleB', []).factory('serviceA', function(){...})angular.module(
02
2020
06

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

Angular1.x中常用ngRoute和ui.router,还有一种为Angular2设计的new router(面向组件)。后面那个没在实际项目中用过,就不讲了。无论是ngRoute还是ui.router,作为框架额外的附加功能,都必须以 模块依赖 的形式被引入。区别ngRoute模块是Angular自带的路由模块,而ui.router模块是基于ngRoute模块开发的第三方模块。ui.router是基于state(状态)的,ngRoute是基于url的,ui.router模块具有更强大的功
02
2020
06

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

目录结构的划分1、对于小型项目,可以按照文件类型组织,比如:cssJs  {controllersmodelsservicesfilters}templates2、但是对于规模较大的项目,最好按业务模块划分,比如:cssModulesaccountcontrollersmodelsservicesfilterstemplatesdiskcontrollersmodelsservicesfilterstemplatesmodules下最好再有一个common目录来存放公共的东西。3.逻辑
02
2020
06

两个平级界面块a和b,如果a中触发一个事件,有哪些方式能让b知道?详述原理

这个问题换一种说法就是,如何在平级界面模块间进行通信。有两种方法,一种是共用服务,一种是基于事件。(1)共用服务在Angular中,通过factory可以生成一个单例对象,在需要通信的模块a和b中注入这个对象即可。(2)基于事件这个又分两种方式第一种是借助父controller。在子controller中向父controller触发($emit)一个事件,然后在父controller中监听($on)事件,再广播($broadcast)给子controller,这样通过事件携带的参数,实现了数据经
02
2020
06

factory、service和provider是什么关系?

1.factory把service的方法和数据放在一个对象里,并返回这个对象app.factory('FooService', function(){return {target: 'factory',sayHello: function(){return 'hello ' + this.target;}}});2.service通过构造函数方式创建service,返回一个实例化对象app.service('FooService',
02
2020
06

{{now | 'yyyy-MM-dd'}}这种表达式里面,竖线和后面的参数通过什么方式可以自定义?

filter,格式化数据,接收一个输入,按某规则处理,返回处理结果。内置filter1、ng内置的filter有九种:1.date(日期)2.currency(货币)3.limitTo(限制数组或字符串长度)4.orderBy(排序)5.lowercase(小写)6.uppercase(大写)7.number(格式化数字,加上千位分隔符,并接收参数限定小数点位数)8.filter(处理一个数组,过滤出含有某个子串的元素)9.json(格式化json对象)2、filter有两种使用方法,1)是直接
02
2020
06

有哪些措施可以改善Angular性能

1.官方提倡的,关闭debug,$compileProvidermyApp.config(function ($compileProvider) {$compileProvider.debugInfoEnabled(false);});2.使用一次绑定表达式即{{::yourModel}}3.减少watcher数量4.在无限滚动加载中避免使用ng-repeat5.使用性能测试的小工具去挖掘你的angular性能问题,我们可以使用简单的console.time()也可以借助开发者工具以及Batar
02
2020
06

Angular Directive中restrict中分别可以怎样设置?scope中@,=,&有什么区别?

restrict中可以分别设置:A匹配属性E匹配标签C匹配classM 匹配注释当然你可以设置多个值比如AEC,进行多个匹配。在scope中,@,=,&在进行值绑定时分别表示@获取一个设置的字符串,它可以自己设置的也可以使用{{yourModel}}进行绑定的;= 双向绑定,绑定scope上的一些属性;& 用于执行父级scope上的一些表达式,常见我们设置一些需要执行的函数< 进行单向绑定。angular.module('docsIsolationExample&#
02
2020
06

如何取消$timeout,以及停止一个$watch()?

停止$timeout我们可以用cancel:var customTimeout = $timeout(function () {// your code}, 1000);$timeout.cancel(customTimeout);停掉一个$watch:// .$watch()会返回一个停止注册的函数function that we store to a variablevar deregisterWatchFn = $rootScope.$watch(‘someGloballyAvailabl
02
2020
06

表达式{{yourModel}}是如何工作的?

它依赖于$interpolation服务,在初始化页面html后,它会找到这些表达式,并且进行标记,于是每遇见一个{{}},则会设置一个$watch。而$interpolation会返回一个带有上下文参数的函数,最后该函数执行,则算是表达式$parse到那个作用域上。
02
2020
06

ng-show/ng-hide与ng-if的区别?

第一点区别是,ng-if在后面表达式为true的时候才创建这个dom节点,ng-show是初始时就创建了,用display:block和display:none来控制显示和不显示。第二点区别是,ng-if会(隐式地)产生新作用域,ng-switch、ng-include等会动态创建一块界面的也是如此。这样会导致,在ng-if中用基本变量绑定ng-model,并在外层div中把此model绑定给另一个显示区域,内层改变时,外层不会同步改变,因为此时已经是两个变量了。{{name}}ng-show不
30
2020
04

在angular中MVVM模式主要分为四部分

View:它专注于界面的显示和渲染,在angular中则是包含一堆声明式Directive的视图模板。ViewModel:它是View和Model的粘合体,负责View和Model的交互和协作,它负责给View提供显示的数据,以及提供了View中Command事件操作Model的途径;在angular中$scope对象充当了这个ViewModel的角色;Model:它是与应用程序的业务逻辑相关的数据的封装载体,它是业务领域的对象,Model并不关心会被如何显示或操作,所以模型也不会包含任何界面显
14
2020
04

在写controlloer逻辑的时候 你需要注意什么?

简化代码(这个是所有开发人员都要具备的)坚决不能操作dom节点 这个时候可能会问 为什么不能啊你的回答是:DOM操作只能出现在指令(directive)中。最不应该出现的位置就是服务(service)中。Angular倡导以测试驱动开发,在service或者controller中出现了DOM操作,那么也就意味着的测试是无法通过的。当然,这只是一点,重要的是使用Angular的其中一个好处是啥,那就是双向数据绑定,这样就能专注于处理业务逻辑,无需关系一堆堆的DOM操作。如果在Angular的代码中
14
2020
04

ng-repeat迭代数组的时候,如果数组中有相同值,会有什么问题,如何解决?

会提示 Duplicates in a repeater are not allowed. 加 track by $index 可解决。当然,也可以 trace by 任何一个普通的值,只要能唯一性标识数组中的每一项即可(建立 dom 和数据之间的关联)。
14
2020
04

ng-if 跟 ng-show/hide的区别有哪些?

ng-if 在后面表达式为 true 的时候才创建这个 dom 节点,ng-show 是初始时就创建了,用 display:block 和 display:none 来控制显示和不显示。ng-if 会(隐式地)产生新作用域,ng-switch 、 ng-include 等会动态创建一块界面的也是如此。
14
2020
04

factory 和 service,provider是什么关系?

factory 把 service 的方法和数据放在一个对象里,并返回这个对象;service 通过构造函数方式创建 service,返回一个实例化对象;provider 创建一个可通过 config 配置的 service。从底层实现上来看,service 调用了 factory,返回其实例;factory 调用了 provider,将其定义的内容放在 $get 中返回。factory 和 service 功能类似,只不过 factory 是普通 function,可以返回任何东西(retur
14
2020
04

angular 核心?

AngularJS是为了克服HTML在构建应用上的不足而设计的。 AngularJS有着诸多特性,最为核心的是:MVC模块化自动化双向数据绑定语义化标签、依赖注入等等
14
2020
04

angularjs 是 mvc 还是 mvvm 框架?

首先阐述下你对mvc和mvvm的理解首先为什么我们会需要MVC?因为随着代码规模越来越大,切分职责是大势所趋,还有为了后期维护方便,修改一块功能不影响其他功能。还有为了复用,因为很多逻辑是一样的。而MVC只是手段,终极目标是模块化和复用。mvvm的优点:低耦合:View可以独立于Model变化和修改,同一个ViewModel可以被多个View复用;并且可以做到View和Model的变化互不影响可重用性:可以把一些视图的逻辑放在ViewModel,让多个View复用独立开发:开发人员可以专注与业务
09
2020
04

angular的数据绑定采用什么机制?详述原理

脏检查机制。双向数据绑定是 AngularJS 的核心机制之一。当 view 中有任何数据变化时,会更新到 model ,当 model 中数据有变化时,view 也会同步更新,显然,这需要一个监控。原理就是,Angular 在 scope 模型上设置了一个监听队列,用来监听数据变化并更新 view 。每次绑定一个东西到 view 上时 AngularJS 就会往 $watch 队列里插入一条 $watch ,用来检测它监视的 model 里是否有变化的东西。当浏览器接收到可以被 angular