日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Angular面试从喜剧到悲剧的十个问题

發布時間:2025/7/14 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Angular面试从喜剧到悲剧的十个问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

雖然只有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 watchderegisterWatchFn();...} });

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

參考

  • 11 Essential AngularJS Interview Questions

  • 11 Tips to Improve AngularJS Performance

  • AngularJS: My solution to the ng-repeat performance problem

  • 29 AngularJS Interview Questions – Can You Answer Them All?

  • The Digest Loop and $apply

  • What is the difference between '@' and '=' in directive scope

  • Angular compile


本文同步博客:http://www.jackpu.com/shi-ge-jing-chang-yu-jian-de-angular-jsmian-shi-wen-ti/

總結

以上是生活随笔為你收集整理的Angular面试从喜剧到悲剧的十个问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。