Angular.js

(一)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)

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容