十个由浅入深的Angular.js问题

[智能社]9小时精讲直播AngularJS课程_附教程课件 【百度云盘】 AngularJS是一门非常值得学习的编程语言,在这系列中,详细地讲述了AngularJS的使用方法!想要学习AngularJS的不妨点击看看吧! 立即下载
虽然只有10个问题,但是覆盖了angular开发中的各个方面,有基本的知识点,也有在开发过程中遇见的问题,同时也有较为开放性的问题去辨别面试者的基础水准和项目经验( PS:答案仅供参考~ )。

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

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

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

通俗的说$rootScrope 页面所有$scope的父亲。

我们来看下如何产生$rootScope和$scope吧。

step1:Angular解析ng-app然后在内存中创建$rootScope。

step2:angular回继续解析,找到{{}}表达式,并解析成变量。

step3:接着会解析带有ng-controller的div然后指向到某个controller函数。这个时候在这个controller函数变成一个$scope对象实例。

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

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

4. Angular中的digest周期是什么?

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

5. 如何取消 $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(‘someGloballyAvailableProperty’, function (newVal) {  
  if (newVal) {
    // we invoke that deregistration function, to disable the watch
    deregisterWatchFn();
    ...
  }
});

6. 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();

      }  
    }
  };
});
<div ng-app="docsIsolationExample">  
<div ng-controller="Controller">  
  <my-customer click-handle="alertName()"></my-customer>
</div>  
 </div>

Codepen Demo

  • < 进行单向绑定。

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

  • Service

  • events,指定绑定的事件

  • 使用 $rootScope

  • controller之间直接使用$parent, $$childHead等

  • directive 指定属性进行数据绑定

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

  • 官方提倡的,关闭debug,$compileProvider
myApp.config(function ($compileProvider) {  
  $compileProvider.debugInfoEnabled(false);
});
  • 使用一次绑定表达式即{{::yourModel}}

  • 减少watcher数量

  • 在无限滚动加载中避免使用ng-repeat,关于解决方法可以参考这篇文章

  • 使用性能测试的小工具去挖掘你的angular性能问题,我们可以使用简单的console.time()也可以借助开发者工具以及Batarang

console.time("TimerName");  
//your code
console.timeEnd("TimerName");  

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

这是一个开放性的问题,尽管网上会有很多这样的争论,但是普遍还是认为这并不是一个特别好的尝试。其实当我们学习Angular的时候,我们应该做到从0去接受angular的思想,数据绑定,使用angular自带的一些api,合理的路由组织和,写相关指令和服务等等。angular自带了很多api可以完全替代掉jquery中常用的api,我们可以使用angular.element,$http,$timeout,ng-init等。

我们不妨再换个角度,如果业务需求,而对于一个新人(比较熟悉jQuery)的话,或许你引入jQuery可以让它在解决问题,比如使用插件上有更多的选择,当然这是通过影响代码组织来提高工作效率,随着对于angular理解的深入,在重构时会逐渐摒弃掉当初引入jquery时的一些代码。(Po主就是这样的人,希望不要被嘲笑,业务却是赶着走)

所以我觉得两种框架说完全不能一起用肯定是错的,但是我们还是应该尽力去遵循angular的设计。

10. 如何进行angular的单元测试

我们可以使用karam+jasmine 进行单元测试,我们通过ngMock引入angular app然后自行添加我们的测试用例。 一段简单的测试代码:

describe('calculator', function () {

  beforeEach(module('calculatorApp'));

  var $controller;

  beforeEach(inject(function(_$controller_){
    $controller = _$controller_;
  }));

  describe('sum', function () {
        it('1 + 1 should equal 2', function () {
            var $scope = {};
            var controller = $controller('CalculatorController', { $scope: $scope });
            $scope.x = 1;
            $scope.y = 2;
            $scope.sum();
            expect($scope.z).toBe(3);
        });    
    });

});

关于测试,大家可以看下使用karma进行angular测试

除了Karam , Angular.js团队推出了一一款e2e(end-to-end)的测试框架protractor

参考


Codex 赋能UI自动化测试 ✅ 零编码门槛:业务人员也能直接上手✅ 无需复杂配置:跳过部署陷阱,分钟级启用✅ 无权限风险:沙箱隔离 + 操作审计,安全可控✅ 精准匹配 UI 自动化需求:生成代码与执行操作一体化本文我使用CRM系统分类管理功能进行测试演示,手把手教你从测试用例编写,到上传Codex、自动执行浏览器操作,每一步都有细节,看完直接复刻到工作中。 阅读详情

相关推荐

从AP到ADSP:高通8650 AudioReach中GSL-Passthru-GPR的数据通路剖析

本文深入剖析了高通骁龙8650平台AudioReach架构中,音频数据从应用处理器(AP)到音频数字信号处理器(ADSP)的完整传输路径。重点解析了GSL(Graph Service Layer)如何封装命令,并通过Passthru驱动与GPR(Generic Packet Router)协同工作,实现跨处理器的高效、异步数据交换,揭示了现代手机复杂音频系统背后的核心通信机制。

cherry的博客 536

AngularJS中使用Karma+Jasmine进行测试

AngularJS中使用Karma+Jasmine进行测试 1、测试定义:衡量应用健康度的手段 2、测试目的: 了解代码各部分是否按预期工作; 更容易定位bug从而解决之; 其他开发人员更容易上手; 更方便、容易的提供应用可用文档 3、测试方法: 两种测试类型:单元测试、端到端测试 1)单元测试:测试隔离的、单独组件的代码 适用于测试小型、独立代码单元、单个函数或者较小交互功能 2)端到端测试:对...

arrisking的博客 423

从Gcode命令看3D打印机的‘大脑’:Marlin/Klipper固件是如何执行你的指令的?

本文深入解析3D打印机固件Marlin和Klipper如何执行Gcode指令,从语法解析到运动控制算法,再到温度管理,详细揭示了从指令到物理动作的转化过程。通过对比两大固件的设计哲学和性能优化技巧,帮助用户更好地理解和调优3D打印机的核心控制系统。

weixin_26763955的博客 382

OPC UA直连PLC:从配置到排障的完整指南

从传统Modbus TCP的寄存器轮询痛点切入,理解OPC UA作为新一代工业通信标准的核心价值:通过信息模型将PLC数据映射为结构化节点树,支持语义化访问、安全加密与跨系统互操作。现代S7-1200/1500 CPU内置OPC UA服务器,可直接向MES、SCADA等上层系统暴露标准接口,省去中间网关与DCOM配置的繁琐环节。围绕TIA Portal中激活OPC UA服务器、证书双向信任、安全策略选择,以及UAExpert客户端从连接到读写的完整实操链路,并针对证书握手失败、DB块变量不可见、CPU负载升

weixin_33795806的博客 320

Cesium实战:如何在前端直接渲染TIFF影像(附完整代码与避坑指南)

本文详细介绍了如何在前端利用Cesium直接加载和渲染TIFF影像的完整技术方案。针对TIFF格式的地理影像数据,文章提供了从文件解析、坐标转换到像素处理与Cesium集成的全流程代码实现,并分享了性能优化与常见问题的避坑指南,帮助开发者高效实现三维地理可视化。

weixin_29290947的博客 315

模拟IC版图DRC实战:手把手教你搞定MIM电容天线错误和ESD.10g违例

本文深入解析模拟IC版图中的MIM电容天线错误和ESD.10g违例问题,提供从错误解码到实战修复的完整指南。通过电路图修改、版图优化和验证闭环等步骤,帮助工程师高效解决DRC错误,特别适用于ADC等精密模拟电路设计。文章还分享了高级排错技巧和预防性设计策略,大幅提升流片成功率。

weixin_27697385的博客 295

karma + Jasmine 自动化测试AngularJS代码

上次说过一个关于Jasmine的自动化测试,但是并没有在angualrjs项目中使用。所以今天修改一下,下面是使用示例。 安装相关插件包。 karma npm i -g karmajasmine npm i -g jasmineangular npm i bower ... bower i angularangular-mocks bower i angular-mocks

gemuandyou的专栏 2077

Transformer从菜鸟到新手(一)

从本文开始回顾一下Transformer的原理与实现细节,包括分词算法BPE的实现。最终利用从零实现的Transformer模型进行英中翻译。

日积月累,天道酬勤 2125

前端视频教程分享

有无法访问的或者需要其他相关教程(大数据/K8S/java/Linux/架构/Python/C++)的可以留下邮箱,我看到就会发送相关教程。 react: 链接:https://pan.baidu.com/s/17A3rOXXsk9oWczYUUmdXrQ 提取码:0lc5 VueJs: 链接:https://pan.baidu.com/s/17fhBu4azlgsOl2-RL_6...

聆听你的心声 5314

「JS逆向三百例」JS逆向HIKVISION-视频监控的前端密码加密

本文详细分析了HIKVISION-海康威视监控前端登录过程中密码的加密机制,通过逆向工程解析了其 JavaScript 加密逻辑,重点研究了HIKVISION-海康威视监控的前端密码SHA256加密算法的实现。基于逆向分析结果,使用 Python 模拟了HIKVISION-海康威视监控的登录流程,最终实现了自动化登录功能。本文旨在为安全研究人员提供技术参考,帮助理解前端加密机制,并强调技术研究的合法性和合规性。

布啦啦 1099

弱小目标检测跟踪算法研究(5) 基于顶帽变换(Top_hat)算法的红外弱小目标检测之背景抑制

基于顶帽变换(Top_hat)算法的红外弱小目标检测之背景抑制1. 前言2. 顶帽变换(Top_hat)算法3. Matlab仿真4. 小结 1. 前言 红外图像中的弱小目标,目标属性包涵“弱"和“小’’两个方面:“弱’’是指目标在红外波长上所表现出来的强度,具体反映到所拍摄的红外图像上,就是指目标的灰度值;而“小’’是指目标的尺寸大小,也就是前面所述的成像面积很小,反映到红外图像上就是指目标所占的像素数目很少。 SPIE国际光学工程学会(Societyof Photo一0ptical Instrument

sinat_34897952的博客 5293

十个由浅入深的Angular.js面试问题

虽然只有10个问题,但是覆盖了angular开发中的各个方面,有基本的知识点,也有在开发过程中遇见的问题,同时也有较为开放性的问题去辨别面试者的基础水准和项目经验。 1. ng-show/ng-hide 与 ng-if 的区别? 我们都知道ng-show/ng-hide实际上是通过 display 来进行隐藏和显示的。而ng-if实际上控制dom节点的增删除来实现的。因此如果我们是根据

hsany330的专栏 968

最佳RANSAC算法拟合矩形的实现(基于PCL库)

最佳RANSAC算法是一种常用的参数估计方法,用于从数据集中拟合出最佳的模型。在计算机视觉和图像处理领域,最佳RANSAC算法常用于拟合几何形状,如矩形。本文将详细介绍如何使用点云库(PCL)中的最佳RANSAC算法来拟合矩形,并提供相应的源代码。

JbPatch的博客 1542

web前端初学Angular由浅入深上手开发项目

通过以上由浅入深的学习路径,你可以从零基础逐步掌握 Angular 的核心概念和开发技巧,并最终完成一个完整的前端项目。记住,实践是最好的学习方式,建议在学习过程中多动手写代码,并参考官方文档和社区资源解决遇到的问题。祝你在 Angular 的学习和开发中取得成功!

Min_nna的博客 1476

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

最新最全Angular4.x、Angular5.x、Angular6.x、Ionic3.x入门到实战视频教程

这个平台很受益,能学到很多想学的东西,也很感谢大家的分享,下面也将自己觉得不错的2017年最全Angular4.x、Angular5.x、Angular6.x、Ionic3.x入门到实战视频教程分享给大家,希望能有所收获。     免费下载地址分享一下: https://pan.baidu.com/s/1eTyvq5W  或者 https://pan.baidu.com/s/1d05sPC...

yuanlaile的博客 2万+

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

zone.js由入门到放弃之一——通过一场游戏认识zone.js

通过一个小例子展示了一下zone.js的功能,同时根据例子浅述了一下zone.js的几个特点。

OpenTiny的博客 387

4 5区别 angular 和_实用比较,帮你决策到底选择Vue还是Angular4、5

本人从Angular2时代开始用,当时全国都没什么人敢碰Angular2,我们就靠着啃它源代码中的注释,熟悉了Angular2的用法,并在实用中,还给Angular2团队提交bug。因此,这里提供给大家最实用的比较,帮助大家在Vue和Angular之间选择。先说结论:用 vue + es6。不要考虑Angular,它有2个致命问题,导致它并不适合实用。我们分几个关键方面来说:* 功能上,vue其实...

weixin_39775976的博客 117

4 5区别 angular 和_前端开发实用比较,一篇文章告诉你到底是用Vue还是用Angular4、5?...

从Angular2时代开始,前端开发就逐渐开始用用Angular了,当时全国都没什么人敢碰Angular2,多数开发者就靠着啃它源代码中的注释,熟悉了Angular2的用法,并在实用中,还给Angular2团队提交bug。但是现在,Vue的出现,让很多还没接触Angular多久的开发者开始纠结,这两个到底用哪个好?用Vue还是用Angular?因此,这里提供给大家最实用的比较,帮助大家在Vue和A...

weixin_39562338的博客 110

Vue.js 2.0 由浅入深,第一天 day01

### Vue.js 五天 *汤小洋*## 一、 Vue.js简介### 1. Vue.js是什么 **Vue.js**也称为Vue,读音/vju:/,类似view,错误读音v-u-e 版本:v1.0 v2.0 + 是一个构建用户界面的框架 + 是一个轻量级MVVM(Model-View-ViewModel)框架,和angular、react类似,其实就是所谓的数据双...

weixin_34406061的博客 179

前端开发实用比较,一篇文章告诉你到底是用Vue还是用Angular4、5?

从Angular2时代开始,前端开发就逐渐开始用用Angular了,当时全国都没什么人敢碰Angular2,多数开发者就靠着啃它源代码中的注释,熟悉了Angular2的用法,并在实用中,还给Angular2团队提交bug。 但是现在,Vue的出现,让很多还没接触Angular多久的开发者开始纠结,这两个到底用哪个好? 用Vue还是用Angular? 因此,这里提供给大家最实用的比较,帮助大家在V...

li420520的博客 3517

Web 基础入门指南:让你由浅入深掌握网站开发!

此外,学习如何与后端语言配合,如 PHP 或 Python,可以为你的网站提供更高的动态功能。HTML 是负责网站内容的骨架的语言,CSS 用于创建样式和美化内容,而 JavaScript 是一种可以使网站更交互和动态的编程语言。学习网站开发的一部分是如何设计一个主题和界面,这需要你了解网站的布局和颜色和其他视觉元素的搭配。你需要学习如何组织资源文件,使用缓存和压缩资源,还可以使用多种工具进行网站测试,如 Lighthouse 和 Google Analytics 等。示例:HTML 基本结构。

canshanyin的博客 336

Angular.js

强推! angular 模块依赖分析 可视化哦 Create graphs of your angular projects using angular-architecture-graph. Angular.js 指令中的属性 下面通过一些简单的示例说明 Angular 指令中属性的值的获取方式以及函数的使用。 掌握 Angular2...

weixin_34054866的博客 381
上一篇: 报纸传媒
下一篇: Angular的自动化测试
SunsCheung
博客等级 码龄11年 30粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值