虽然只要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
婚配classM
婚配解释
固然你能够设置多个值比方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>
<
举行单向绑定。
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
参考
本文同步博客:http://www.jackpu.com/shi-ge-jing-chang-yu-jian-de-angular-jsmian-shi-wen-ti/