(一)angular.js是什么
? ??????????AngularJS誕生于2009年,由Misko Hevery 等人創建,后為Google所收購。是一款優秀的前端JS框架,已經被用于Google的多款產品當中。AngularJS有著諸多特性,最為核心的是:MVC、模塊化、自動化雙向數據綁定、語義化標簽、依賴注入等等。AngularJS 是一個JavaScript框架。它是一個以 JavaScript 編寫的庫。
(二)angular.js的特點
? ??1、MVC(Module——Control——View)數據模型,控制器,視圖
? ? 2、 Module(模塊化)
? ? 3、雙向數據綁定
? ? 4、依賴注入
? ? 5、指令
(三)angular可以做什么?
? ? (1)構建一個CRUD的應用
? ? (2)開發spa(單頁面應用)
(四)angular的指令
? ??????????ng-app指令初始化一個 AngularJS 應用程序。
? ??????????ng-controller指令定義了應用程序控制器。
? ??????????ng-init指令初始化應用程序數據。
? ??????????ng-model指令綁定 HTML 元素到應用程序數據。
? ?????????ng-repeat指令對于集合中(數組中)的每個項會克隆一次 HTML 元素。
? ??????????ng-bind指令把應用程序變量 name 綁定到某個段落的 innerHTML。
? ??????????ng-bind指令把應用程序數據綁定到 HTML 視圖。
????????????ng-click 指令綁定點擊事件
? ? ? ? ? ? ng-show/hide 顯示/隱藏
? ? ? ? ? ? ng-if 條件為false移除HTML元素,true添加
? ?(五)angular的過濾器
? ??????????內置 filter
????????????ng 內置的 filter 有九種:
????????????date(日期)
????????????currency(貨幣)
????????????limitTo(限制數組或字符串長度)
????????????orderBy(排序)
????????????lowercase(小寫)
????????????uppercase(大寫)
????????????number(格式化數字,加上千位分隔符,并接收參數限定小數點位數)
????????????filter(處理一個數組,過濾出含有某個子串的元素)
????????????json(格式化 json 對象)
(六)ng-show/ng-hide與ng-if的區別?
????????????我們都知道ng-show/ng-hide實際上是通過display來進行隱藏和顯示的。而ng-if實 ? ? ? ? ? ? 際上控制dom節點的增刪除來實現的。因此如果我們是根據不同的條件來進行 ? ? ? ? ? ? ? ? ? dom節點的加載的話,那么ng-if的性能好過ng-show.
(七)解釋下什么是$rootScrope以及和$scope的區別?
? ??????????通俗的說$rootScrope(全局作用域)頁面所有$scope(局部作用域)的父親。
? ??????????Angular解析ng-app然后在內存中創建$rootScope。
? ??????????帶有ng-controller的div然后指向到某個controller函數。這個時候在這個controller ? ? ? ? ? ? ? 函數變成一個$scope對象實例。
(八)angular 的數據綁定采用什么機制?詳述原理
? ??????臟檢查機制。
? ? ? ? 雙向數據綁定是AngularJS的核心機制之一。當view中有任何數據變化時,會更新到 ? ? ? ? ?model,當model中數據有變化時,view也會同步更新,顯然,這需要一個監控。 ? ? ? ? ?原理就是,Angular在scope模型上設置了一個 監聽隊列,用來監聽數據變化并更新 ? ? ? ? view。每次綁定一個東西到view上時AngularJS就會往$watch隊列里插入一條 ? ? ? ? ? ? ? ? ? $watch,用來檢測它監視的model里是否有變化的東西。當瀏覽器接收到可以被 ? ? ? ? ? ? ? angular context處理的事件時,$digest循環就會觸發,遍歷所有的$watch,最后更 ? ? ? ? ? ?新dom。
? ? (九)angular應用常用哪些路由庫,各自的區別是什么?
? ??????Angular中常用ngRoute和ui.router
? ??????區別:ngRoute模塊是Angular自帶的路由模塊,而ui.router模塊是基于ngRoute模塊 ? ? ? ? ? ? ? ? ? ?開發的第三方模塊。
? ? ? ? ? ? ? ? ? ?ui.router是基于state(狀態)的,ngRoute是基于url的,ui.router模塊具有更 ? ? ? ? ? ? ? ? ? 強大的功能,主要體現在視圖的嵌套方面。
? ? ? (十)angular 的缺點有哪些?
? ? ? ? ? ? 強約束
????????????導致學習成本較高,對前端不友好。
????????????但遵守 AngularJS 的約定時,生產力會很高,對 Java 程序員友好。
? ? ? ? ? ? 不利于 SEO
? ? ? ? (十一)angular 中的 $http? ? ? ? ??
????????????????$http 是 AngularJS 中的一個核心服務,用于讀取遠程服務器的數據。
????????????????我們可以使用內置的$http服務直接同外部進行通信。$http服務只是簡單的封裝 ? ? ? ? ? ? ? 了瀏覽器原生的XMLHttpRequest對象。鏈式調用$http服務是只能接受一個參數 ? ? ? ? ? ? ? ?的函數,這個參數是一個對象,包含了用來生成HTTP請求的配置內容。
? ? ? ? (十二)AngularJS的數據雙向綁定是怎么實現的?
? ??????????????1、每個雙向綁定的元素都有一個watcher
????????????????2、在某些事件發生的時候,調用digest臟數據檢測。
????????????????????這些事件有:表單元素內容變化、Ajax請求響應、點擊按鈕執行的函數等。
????????????????3、臟數據檢測會檢測rootscope下所有被watcher的元素。
????????????????????$digest函數就是臟數據監測
????????(十三)angular路由
? ? ? ? ? ? ? ?路由功能是由 routeProvider服務 和 ng-view 搭配實現,ng-view相當于提供 ? ? ? ? ? ? ? ? ? ? 了頁面模板的掛載點,當切換URL進行跳轉時,不同的頁面模板會放在ng- ? ? ? ? ? ? ? ? ? ? ? view所在的位置; 然后通過 routeProvider 配置路由的映射。
? ??????????一般主要通過兩個方法:
????????????when():配置路徑和參數;
????????????otherwise:配置其他的路徑跳轉,可以想成default。
? ??????????when的第二個參數:
????????????controller:對應路徑的控制器函數,或者名稱
????????????controllerAs:給控制器起個別名
????????????template:對應路徑的頁面模板,會出現在ng-view處,比如 ?xxxx"
????????????templateUrl:對應模板的路徑,比如"src/xxx.html"
? ??(十四)angular依賴注入的5個核心
? ? ? ? ? ? (1)value:一個簡單的javascript對象,用于向控制器傳遞值
? ? ? ? ? ? (2)factory這是一個核心組件,通常我們稱其為工廠模式,其理解為時一個函數用 ? ? ? ? ? ? ? ? ? ? 來返回值或者函數
? ? ? ? ? ? (3)service它是一個可注入的構造器,在AngularJS中它是單例的,用它在 ? ? ? ? ? ? ? ? ? ? ? ? ? Controller中通信或者共享數據都很合適,service中 單獨使用的話是作為自 ? ? ? ? ? ? ? ? ? ? ? 定義服務來的。
? ? ? ? ? ? (4)constant定義常量用的,這貨定義的值當然就不能被改變,它可以被注入 ? ? ? ? ? ? ? ? ? ? ? ? ?到任何地方
????????????(5)provider是他們的老大,上面的幾乎(除了constant)都是provider的封裝, ? ? ? ? ? ? ? ? ? ? ? provider必須有一個$get方法,當然也可以說provider是一個可配置的factory. ? ? ? ? ? ? ? ? ? 使用provider的時候,我們不能單獨的配置,需要在config中來創建provider
? ?(十五)angular三種注入方式
? ? ? ? ? ? ? ? (1)內聯式 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ????????????????????????app.controller("myCtrl3['$scope','hello1','hello2',function($scope,hello1,h????????????????????????ello2){ ?$scope.hello=function(){hello1.hello();hello2.hello();}}]);
? ? ? ? ? ? ? ? (2)標記式
? ??????????????????????varmyCtrl2=function($scope,hello1,hello2){
? ? ? ? ? ? ? ? ? ? ?$scope.hello=function() ? ? ? ? ? ? ? ? ? ? ? ?????????????????????{hello1.hello();hello2.hello();}}myCtrl2.$injector= ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ['hello1','hello2'];
? ? ? ? ? ? ? ? ? ? ? ?app.controller("myCtrl2",myCtrl2);
????????????????(3)推斷式
? ??????????????????????app.controller("myCtrl1",function($scope,hello1,hello2)????
????????????????????????{$scope.hello=function(){hello1.hello();
? ? ? ? ? ? ? ? ? ? ? ? ?hello2.hello();}});
? ??(十六)angular渲染數據
? ? ? ? ? ? (1)
(2)
(3)