雖然只有10個問題,但是覆蓋了angular開發中的各個方面,有基本的知識點,也有在開發過程中遇見的問題,同時也有較為開放性的問題去辨別面試者的基礎水準和項目經驗如果自己一年前面試肯定是喜劇到悲劇的轉變?。(PS:答案僅供參考~)。
ng-show/ng-hide
與 ng-if
的區別?我們都知道ng-show/ng-hide實際上是通過display
來進行隱藏和顯示的。而ng-if實際上控制dom節點的增刪除來實現的。因此如果我們是根據不同的條件來進行dom節點的加載的話,那么ng-if的性能好過ng-show.
$rootScrope
以及和$scope
的區別?通俗的說$rootScrope
頁面所有$scope
的父親
。
我們來看下如何產生$rootScope
和$scope
吧。
step1:Angular解析ng-app
然后在內存中創建$rootScope
。
step2:angular回繼續解析,找到{{}}
表達式,并解析成變量。
step3:接著會解析帶有ng-controller
的p然后指向到某個controller函數。這個時候在這個controller函數變成一個$scope對象實例。
{{yourModel}}
是如何工作的?它依賴于 $interpolation服務,在初始化頁面html后,它會找到這些表達式,并且進行標記,于是每遇見一個{{}}
,則會設置一個$watch
。而$interpolation
會返回一個帶有上下文參數的函數,最后該函數執行,則算是表達式$parse
到那個作用域上。
每個digest周期中,angular總會對比scope上model的值,一般digest周期都是自動觸發的,我們也可以使用$apply進行手動觸發。更深層次的研究,可以移步The Digest Loop and apply。
$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(‘someGloballyAvailableProperty’, function (newVal) { if (newVal) { // we invoke that deregistration function, to disable the watch deregisterWatchFn(); ... }});
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(); } } };});
<p ng-app="docsIsolationExample"><p ng-controller="Controller"> <my-customer click-handle="alertName()"></my-customer></p> </p>
Codepen Demo:https://codepen.io/Jack_Pu/pen/NrpRBK
<
進行單向綁定。
Service
events,指定綁定的事件
使用 $rootScope
controller之間直接使用$parent
, $$childHead
等
directive 指定屬性進行數據綁定
官方提倡的,關閉debug,$compileProvider
myApp.config(function ($compileProvider) { $compileProvider.debugInfoEnabled(false);});
使用一次綁定表達式即{{::yourModel}}
減少watcher數量
在無限滾動加載中避免使用ng-repeat,關于解決方法可以參考這篇文章
使用性能測試的小工具去挖掘你的angular性能問題,我們可以使用簡單的console.time()
也可以借助開發者工具以及Batarang
console.time("TimerName");//your codeconsole.timeEnd("TimerName");
這是一個開放性的問題,盡管網上會有很多這樣的爭論,但是普遍還是認為這并不是一個特別好的嘗試。其實當我們學習Angular的時候,我們應該做到從0去接受angular的思想,數據綁定,使用angular自帶的一些api,合理的路由組織和,寫相關指令和服務等等。angular自帶了很多api可以完全替代掉jquery中常用的api,我們可以使用angular.element
,$http
,$timeout
,ng-init
等。
我們不妨再換個角度,如果業務需求,而對于一個新人(比較熟悉jQuery)的話,或許你引入jQuery可以讓它在解決問題,比如使用插件上有更多的選擇,當然這是通過影響代碼組織來提高工作效率,隨著對于angular理解的深入,在重構時會逐漸摒棄掉當初引入jquery時的一些代碼。(?Po主就是這樣的人,希望不要被嘲笑,業務卻是趕著走)
所以我覺得兩種框架說完全不能一起用肯定是錯的,但是我們還是應該盡力去遵循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
感謝各位的閱讀!看完上述內容,你們對關于Angular的面試題大概了解了嗎?希望文章內容對大家有所幫助。如果想了解更多相關文章內容,歡迎關注本站行業資訊頻道。
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
c語言中正確的字符常量是用一對單引號將一個字符括起表示合法的字符常量。例如‘a’。數值包括整型、浮點型。整型可用十進制,八進制,十六進制。八進制前面要加0,后面...
2022年天津專場考試原定于3月19日舉行,受疫情影響確定延期,但目前延期后的考試時間推遲。 符合報名條件的考生,須在規定時間登錄招考資訊網(www.zha...
:喜歡聽,樂意看。指很受歡迎?!巴卣官Y料”喜聞樂見:[ xǐ wén lè jiàn ]詳細解釋1. 【解釋】:喜歡聽,樂意看。指很受歡迎。2. 【示例】:這是...
(資料圖)有關敲字的部首方面的知識,估計很多人不是太了解,今天就給大家詳細的介紹一下關于敲字的部首的相關內容。1、敲部首:高。2、敲:qiāoㄑㄧㄠˉ?!墩f文解字》:“敲,橫擿也。從攴、高聲?!?。手持卜以小擊是攴之范式。臺觀之上韜諸下是高之范式。攴、高兩范式疊加。從高往下勢短距手持卜以小擊是敲之范式。3、本義:打、擊。如:敲打、敲擊、敲詐、敲邊鼓(喻從旁幫人說話)、敲門磚、敲骨吸髓、旁敲側擊。...
開通花唄有風險嗎?開通花唄是沒有風險的,其本質是個人小額貸款服務,主要依托于各種消費場景。用戶在開通花唄時,假如頁面跳轉到了人臉識別,則需要用戶完成人臉識別后才可以開通花唄。開通花唄是好還是不好?有利的方面:與很多信貸產品相比較,花唄支持的場景幾乎是最全面的,不僅包括支付寶本身的購物商城,小到日常生活中比如買早餐等都是可以進行支付的,很多平臺的產品基本上都不能做到;其次花唄使用是沒有費用的,除了用...
同比增長和同比增速的區別?1、員工資金結算的賬戶為同比增長,公司資金周轉的賬戶為同比增速;2、同比增長可用現金進行賬戶相關操作,同比增速則不能;3、同比增長是為了應對風險,而同比增速則是為了預防錯漏;4、同比增長的范圍為服務人員所得,而同比增速的范圍為技術人員所得;5、同比增長時審計系統,同比增速是分析系統。同比和環比分別如何計算?這個月的第一周和上個月的第一周一樣。在實踐中,一般是與同期進行比較...