如何衡量一個人的 AngularJS 水平?

謝謝。怎麼能比較量化的評估一個人的angularjs(1.x)水平呢?


這個問題邀請我回答就對了。我提供一些面試時候問過的問題:

1. angular的數據綁定採用什麼機制?詳述原理

2. 兩個平級界面塊a和b,如果a中觸發一個事件,有哪些方式能讓b知道,詳述原理

3. 一個angular應用應當如何良好地分層?

4. angular應用常用哪些路由庫,各自的區別是什麼?

5. 如果通過angular的directive規劃一套全組件化體系,可能遇到哪些挑戰?

6. 分屬不同團隊進行開發的angular應用,如果要做整合,可能會遇到哪些問題,如何解決?

7. angular的缺點有哪些?

8. 如何看待angular 1.2中引入的controller as 語法?

9. 詳述angular的「依賴注入」

10. 如何看待angular 2……

上面是需要長篇大論的問題,再來一些小問題:

1. ng-if跟ng-show/hide的區別有哪些?

2. ng-repeat迭代數組的時候,如果數組中有相同值,會有什麼問題,如何解決?

3. ng-click中寫的表達式,能使用JS原生對象上的方法,比如Math.max之類的嗎?為什麼?

4. {{now | "yyyy-MM-dd"}}這種表達式裡面,豎線和後面的參數通過什麼方式可以自定義?

5. factory和service,provider是什麼關係?

能全部答出來的人,應該大家都能認識了……


強答一下。

從小問題開始:

1. ng-if跟ng-show/hide的區別有哪些?

第一點區別是,ng-if 在後面表達式為 true 的時候才創建這個 dom 節點,ng-show 是初始時就創建了,用 display:block 和 display:none 來控制顯示和不顯示。

第二點區別是,ng-if 會(隱式地)產生新作用域,ng-switch 、 ng-include 等會動態創建一塊界面的也是如此。

2. ng-repeat迭代數組的時候,如果數組中有相同值,會有什麼問題,如何解決?

會提示 Duplicates in a repeater are not allowed. 加 track by $index 可解決。當然,也可以 trace by 任何一個普通的值,只要能唯一性標識數組中的每一項即可(建立 dom 和數據之間的關聯)。

3. ng-click中寫的表達式,能使用JS原生對象上的方法,比如Math.max之類的嗎?為什麼?

不可以。只要是在頁面中,就不能直接調用原生的 JS 方法,因為這些並不存在於與頁面對應的 Controller 的 $scope 中。除非在 $scope 中添加了這個函數:

$scope.parseInt = function(x){
return parseInt(x);
}

4. {{now | "yyyy-MM-dd"}}這種表達式裡面,豎線和後面的參數通過什麼方式可以自定義?

定義方式:

app.filter("過濾器名稱",function(){
return function(需要過濾的對象, 過濾器參數1, 過濾器參數2, ...){
//...做一些事情
return 處理後的對象;
}
});

使用方式有兩種,一種是直接在頁面里:

&{{now | date : "yyyy-MM-dd"}}&

一種是在 js 裡面用:

// $filter("過濾器名稱")(需要過濾的對象, 參數1, 參數2,...)
$filter("date")(now, "yyyy-MM-dd hh:mm:ss");

5. factory和service,provider是什麼關係?

factory 把 service 的方法和數據放在一個對象里,並返回這個對象;service 通過構造函數方式創建 service,返回一個實例化對象;provider 創建一個可通過 config 配置的 service。

從底層實現上來看,service 調用了 factory,返回其實例;factory 調用了 provider,將其定義的內容放在 $get 中返回。factory 和 service 功能類似,只不過 factory 是普通 function,可以返回任何東西(return 的都可以被訪問,所以那些私有變數怎麼寫你懂的);service 是構造器,可以不返回(綁定到 this 的都可以被訪問);provider 是加強版 factory,返回一個可配置的 factory。

大問題:

1. angular的數據綁定採用什麼機制?詳述原理

臟檢查機制。

Angular 在 scope 模型上設置了一個監聽隊列,用來監聽數據變化並更新 view 。每次綁定一個東西到 view 上時 AngularJS 就會往 $watch 隊列里插入一條 $watch,用來檢測它監視的 model 里是否有變化的東西。當瀏覽器接收到可以被 angular context 處理的事件時,$digest 循環就會觸發,遍歷所有的 $watch,最後更新 dom。

舉個栗子:

&

html5 mutation observer 不能監聽元素尺寸變化,還有何用?
學生關於前端工作的幾個問題?
CSS布局中聖杯布局與雙飛翼布局的實現思路差異在哪裡?
老前端勸新手不要學HTML5是什麼心態?
js入門後,就一直用jquery開發,這樣存在什麼弊端么?

TAG:前端開發 | AngularJS |