27
2020
04

在使用angularjs项目开发中 你使用过那些第三方的插件?

AngularUi ui-router oclazyload等等
27
2020
04

controller之间怎么通讯?

1.event这里可以有两种方式,一种是$scope.$emit,然后通过监听$rootScope的事件获取参数;另一种是$rootScope.$broadcast,通过监听$scope的事件获取参数。这两种方法在最新版本的Angular中已经没有性能区别了,主要就是事件发送的方向不同,可以按实际情况选择。2.service可以创建一个专用的事件Service,也可以按照业务逻辑切分,将数据存储在相应的Service中3.$rootScope这个方法可能会比较dirty一点,胜在方便,也就是把数
27
2020
04

angular 中的 $http

$http 是 AngularJS 中的一个核心服务,用于读取远程服务器的数据。我们可以使用内置的$http服务直接同外部进行通信。$http服务只是简单的封装了浏览器原生的XMLHttpRequest对象。1.链式调用$http服务是只能接受一个参数的函数,这个参数是一个对象,包含了用来生成HTTP请求的配置内容。这个函数返回一个promise对象,具有success和error两个方法。2.返回一个promise对象3.快捷的get请求4.响应对象传送门
27
2020
04

单页应用有哪些优缺点?

单页Web应用(single page web application,SPA),就是只有一张Web页面的应用。单页应用程序 (SPA) 是加载单个HTML 页面并在用户与应用程序交互时动态更新该页面的Web应用程序。 浏览器一开始会加载必需的HTML、CSS和JavaScript,所有的操作都在这张页面上完成,都由JavaScript来控制。因此,对单页应用来说模块化的开发和设计显得相当重要。速度:更好的用户体验,让用户在web app感受native app的速度和流畅,MVC:经典MVC开
27
2020
04

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

app.filter('过滤器名称',function(){    return function(需要过滤的对象, 过滤器参数1, 过滤器参数2, ...){        //...做一些事情           return 处理后的对象;    }}); <p>{{now | date : 'yyyy-M
27
2020
04

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

我们都知道ng-show/ng-hide实际上是通过display来进行隐藏和显示的。而ng-if实际上控制dom节点的增删除来实现的。因此如果我们是根据不同的条件来进行dom节点的加载的话,那么ng-if的性能好过ng-show.
27
2020
04

解释下什么是$rootScrope以及和$scope的区别?

通俗的说$rootScrope 页面所有$scope的父亲。我们来看下如何产生$rootScope和$scope吧。step1:Angular解析ng-app然后在内存中创建$rootScope。step2:angular回继续解析,找到{{}}表达式,并解析成变量。step3:接着会解析带有ng-controller的div然后指向到某个controller函数。这个时候在这个controller函数变成一个$scope对象实例。
27
2020
04

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

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

Angular中的digest周期是什么?

每个digest周期中,angular总会对比scope上model的值,一般digest周期都是自动触发的,我们也可以使用$apply进行手动触发。更深层次的研究,可以移步The Digest Loop and apply。
27
2020
04

如何取消 $timeout, 以及停止一个$watch()? 停止 $timeout我们可以用cancel:

var customTimeout = $timeout(function () {    // your code}, 1000); $timeout.cancel(customTimeout);停掉一个$watch:// .$watch() 会返回一个停止注册的函数function that we store to a variable  var deregisterWatchFn = $rootScope.$watch(‘someGloballyAv
27
2020
04

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

restrict中可以分别设置:


A匹配属性

E匹配标签

C匹配class

M 匹配注释

当然你可以设置多个值比如AEC,进行多个匹配。


在scope中,@,=,&在进行值绑定时分别表示


@获取一个设置的字符串,它可以自己设置的也可以使用{{yourModel}}进行绑定的;

= 双向绑定,绑定scope上的一些属性;

& 用于执行父级scope上的一些表达式,常见我们设置一些需要执行的函数

angular.module('docsIsolationExample', [])  

.controller('Controller', ['$scope', function($scope) {

  $scope.alertName = function() {

      alert('directive scope &');

  }

}])

.directive('myCustomer', function() {

  return {

    restrict: 'E',

    scope: {

      clickHandle: '&'

    },

    template: '<button ng-click="testClick()">Click Me</button>',

    controller: function($scope) {

 

      $scope.testClick = function() {

        $scope.clickHandle();

 

      }  

    }

  };

});


27
2020
04

列出至少三种实现不同模块之间通信方式?

Serviceevents,指定绑定的事件使用 $rootScopecontroller之间直接使用$parent, $$childHead等directive 指定属性进行数据绑定
27
2020
04

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

官方提倡的,关闭debug,$compileProvidermyApp.config(function ($compileProvider) {    $compileProvider.debugInfoEnabled(false);});使用一次绑定表达式即{{::yourModel}}减少watcher数量在无限滚动加载中避免使用ng-repeat,关于解决方法可以参考这篇文章使用性能测试的小工具去挖掘你的angular性能问题,我们可以使用简单的console.time
27
2020
04

你认为在Angular中使用jQuery好么?

这是一个开放性的问题,尽管网上会有很多这样的争论,但是普遍还是认为这并不是一个特别好的尝试。其实当我们学习Angular的时候,我们应该做到从0去接受angular的思想,数据绑定,使用angular自带的一些api,合理的路由组织和,写相关指令和服务等等。angular自带了很多api可以完全替代掉jQuery中常用的api,我们可以使用angular.element,$http,$timeout,ng-init等。我们不妨再换个角度,如果业务需求,而对于一个新人(比较熟悉jQuery)的话,
27
2020
04

如何进行angular的单元测试

我们可以使用karam+jasmine 进行单元测试,我们通过ngMock引入angular app然后自行添加我们的测试用例。 一段简单的测试代码:describe('calculator', function () {   beforeEach(module('calculatorApp'));   var $controller;   beforeEach(inject(function(_$con
27
2020
04

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

angularjs的双向数据绑定采用脏检查(dirty-checking)机制。ng只有在指定事件触发后,才进入 $digest cycle : - DOM事件,譬如用户输入文本,点击按钮等。( ng-click ) - XHR响应事件 ( $http ) - 浏览器Location变更事件 ( $location ) - Timer事件( $timeout , $interval ) - 执行 $digest() 或 $apply()
27
2020
04

依赖注入(DI)

让我们可以不用自己实例化就能创建依赖对象的方法. 简单的来说, 依赖是以注入的方式传递的. 在Web应用中, Angular让我们可以通过DI来创建像Controllers和Directives这样的对象. 我们还可以创建自己的依赖对象, 当我们要实例化它们时, Angular能自动实现注入.
27
2020
04

compile和link的区别: 看到一个比较6的答案。性能力(性能和能力)

编译的时候,compile转换dom,碰到绑定监听器的地方就先存着,有几个存几个,到最后汇总成一个link函数,一并执行,提升了性能。function compile(tElement, tAttrs, transclude) { ... }tElement为编译前的elementfunction link(scope, iElement, iAttrs, controller) { ... }  iElement为编译后的element,已经与作用域关联起来,所以可以数据绑定如果指令
27
2020
04

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

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

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

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

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

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

内置 filter

ng 内置的 filter 有九种:date(日期)currency(货币)limitTo(限制数组或字符串长度)orderBy(排序)lowercase(小写)uppercase(大写)number(格式化数字,加上千位分隔符,并接收参数限定小数点位数)filter(处理一个数组,过滤出含有某个子串的元素)json(格式化 json 对象)filter 有两种使用方法,一种是直接在页面里:<p>{{now | date : 'yyyy-MM-dd'}}</p&
14
2020
04

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

filter,格式化数据,接收一个输入,按某规则处理,返回处理结果。
14
2020
04

ng-click 中写的表达式,能使用 JS 原生对象上的方法吗?

不止是 ng-click 中的表达式,只要是在页面中,都不能直接调用原生的 JS 方法,因为这些并不存在于与页面对应的 Controller 的 $scope 中。举个栗子:<p>{{parseInt(55.66)}}<p>会发现,什么也没有显示。但如果在 $scope 中添加了这个函数:$scope.parseInt = function(x){  return parseInt(x);}这样自然是没什么问题了。对于这种需求,使用一个 filter 或许是不错
14
2020
04

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

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

依赖注入(DI)

让我们可以不用自己实例化就能创建依赖对象的方法. 简单的来说, 依赖是以注入的方式传递的. 在Web应用中, Angular让我们可以通过DI来创建像Controllers和Directives这样的对象. 我们还可以创建自己的依赖对象, 当我们要实例化它们时, Angular能自动实现注入.