初識AngularJs------筆記一

一穿香、AngularJs提供的常用的高級功能
  (1)解耦應用邏輯煮嫌、數(shù)據(jù)模型和視圖
  (2)Ajax服務
  (3)依賴注入
  (4)瀏覽歷史(使書簽和前進器净、后退按鈕能夠像在普通Web應用中一樣工作)
  (5)測試
二尖淘、AngularJs中的數(shù)據(jù)綁定
  1. AS創(chuàng)建實時模板來代替視圖,而不是將數(shù)據(jù)合并進模板之后更新DOM倡勇。任何一個獨立視圖組件中的值都是動態(tài)替換的
  1.1 相關(guān)屬性解釋:
  (1)ng-app:聲明所有被其包含的內(nèi)容都屬于這個AS應用(只有被具有ng-app屬性的DOM元素包含的元素才會受AS影響)

2.數(shù)據(jù)模型不需要同視圖進行交互逞刷,只需要包含數(shù)據(jù)和操作視圖的方法,控制器用來存放將二者綁在一起的業(yè)務邏輯

3.AS可以跟蹤和響應應用變化的方式:
  當AS認為某個值可能發(fā)生變化時译隘,它會運行自己的事件循環(huán)來檢查這個值是否變“臟”。如果該值從上次事件循環(huán)運行之后發(fā)生了變化洛心,則該值被認為是“臟”值固耘。-------這個過程被稱為“臟檢查”(是檢查數(shù)據(jù)模型變化的有效手段)
  這個事件循環(huán)會調(diào)用$digest()循環(huán)

4.AS使用$預定義對象-----為了表示內(nèi)部和內(nèi)置的庫函數(shù)(在AS中只要遇到$符號,都可以只把它看做一個AS對象)

5.簡單的數(shù)據(jù)綁定
  5.1 相關(guān)名詞的解釋:
  (1) $scope:數(shù)據(jù)模型對象词身,是一個簡單的JS對象厅目,其中的屬性可以被視圖訪問,也可以同控制器進行交互
  (2)雙向數(shù)據(jù)綁定:如果視圖改變了某個值法严,數(shù)據(jù)模型會通過臟檢查觀察到這個變化损敷,而如果數(shù)據(jù)模型改變了某個值,視圖也會依據(jù)變化重新渲染
  (3)ng-controller:聲明所有被它包含的元素都屬于某個控制器深啤,為當前DOM元素創(chuàng)建了一個新的$scope對象拗馒,并將它嵌套在$rootScope上
  
  6.AS推薦在視圖中通過對象的屬性而非對象本身來進行引用綁定

三、AngularJs中的模塊
  1.在AS中溯街,模塊是定義應用最主要的方式诱桂。模塊中包含了主要的應用代碼。一個應用可以包含多個模塊呈昔。每一個模塊都包含了定義具體功能的代碼
  1.1 相關(guān)術(shù)語解釋:
angular.module( 'myApp',[] ); //接收兩個參數(shù)挥等,第一個是模塊的名稱,第二個是依賴列表(可以被注入到模塊中的對象列表)《======》相當于AS模塊中的setter方法堤尾,用來定義模塊的`

注:上述方法若只傳遞一個參數(shù)肝劲,就可以用它來引用模塊,如下:

angular.module('myApp'); //這個方法用于獲取應用 《======》相當于AS模塊中的getter方法郭宝,用來獲取對模塊的引用

注:承上就可以在angular.module('myApp');返回的對象上創(chuàng)建我們所需要的應用了

溫馨提示:開發(fā)大型應用時辞槐,我們會創(chuàng)建多個模塊來承載業(yè)務邏輯。將復雜的功能分割成不同的模塊粘室,有助于單獨為他們編寫測試

四催蝗、作用域
  1.作用域是應用狀態(tài)的基礎∮兀基于動態(tài)綁定丙号,我們可以依賴視圖在修改數(shù)據(jù)時立刻更新$scope,也可以依賴$scope在其發(fā)生變化時立刻重新渲染視圖

注:AS將$scope設計成和DOM類似的結(jié)構(gòu)先朦,因此$scope可以進行嵌套(我們可以引用父級$scope中的屬性)

溫馨提示:
  (1)作用域提供了監(jiān)視數(shù)據(jù)模型變化的能力。它允許開發(fā)者使用其中的apply機制犬缨,將數(shù)據(jù)模型的變化
在整個應用范圍內(nèi)進行通知喳魏。我們在作用域的上下文中定義和執(zhí)行表達式,同時它也是將事件通知給另一個控制器和應用其他部分的中介
  (2)將應用的業(yè)務邏輯都放在控制器中怀薛,而將相關(guān)的數(shù)據(jù)都放在控制器的作用域中

2.AS啟動并生成視圖時刺彩,會將根ng-app元素同$rootScope進行綁定,$rootScope是所有$scope對象的最上層

注:(1) $rootScope是AS中最接近全局作用域的對象枝恋,應避免在$rootScope上附加太多的業(yè)務邏輯(這與污染JS的全局作用域是一樣的)
   (2)$scope對象就像一個普通的JS對象创倔,我們可以在其上隨意修改或添加屬性
   (3)$scope對象在AS中充當數(shù)據(jù)模型,但與傳統(tǒng)的數(shù)據(jù)模型不一樣焚碌,$scope并不負責處理和操作數(shù)據(jù)畦攘,它只是視圖和HTML之間的橋梁,是視圖和控制器之間的膠水
   (4)$scope的所有屬性十电,都可以自動被視圖訪問到

3.在AS應用模板中常用的標記解釋:
  (1)指令:將DOM元素增強為可復用的DOM組件的屬性和元素
  (2)值綁定:模板語法 {{ }} 可將表達式綁定到視圖上
  (3)過濾器:可以在視圖中使用的函數(shù)知押,用來進行格式化
  (4)表單控件:用來檢驗用戶輸入的控件

注:AS中的指令通常不會創(chuàng)建自己的$scope,但也有例外鹃骂,比如:ng-controller和ng-repeat台盯,這兩個指令會創(chuàng)建自己的子作用域并將他們附加到DOM元素上

五、控制器
 ∥废摺1.控制器的作用:AS中的控制器是一個函數(shù)静盅,用來向視圖的作用域中添加額外的功能,可用它來給作用域?qū)ο笤O置初始狀態(tài)并添加自定義行為寝殴。

注:AS同其他JS框架的區(qū)別:控制器并不適合用來執(zhí)行DOM操作温亲、格式化或數(shù)據(jù)操作,以及除存儲數(shù)據(jù)模型之外的狀態(tài)維護操作杯矩。它只是視圖和$scope之間的橋梁

2.控制器的嵌套(作用域包含作用域)
  2.1 名詞解釋:
  (1)孤立作用域:在指令內(nèi)部創(chuàng)建的作用域

注:(1)除了孤立作用域外栈虚,所有的作用域都是通過原型繼承而來的 (他們都可以訪問父級作用域)
  (2)避免在控制器中進行DOM操作和數(shù)據(jù)操作史隆,如下就是反例(不推薦):

angular.module('myApp', [])
  .controller('MyController', function($scope) {
     $scope.shouldShowLogin = true;
     $scope.showLogin = function () {
        $scope.shouldShowLogin = !$scope.shouldShowLogin;
     };
     $scope.clickButton = function() {
        $('#btn span').html('Clicked');
     };                                                                   //這是   反例    不推薦
     $scope.onLogin = function(user) {
        $http({
           method: 'POST',
           url: '/login',
           data: {user: user}}
        ).success(function(data) {
          // user});};
     });

推薦:將復雜的邏輯放到指令和服務中魂务。通過使用指令和服務,我們可以將控制器構(gòu)成一個輕量且更易維護的形式泌射,如下是推薦示例:

angular.module('myApp', [])
  .controller('MyController', function($scope,UserSrv) {
      // 內(nèi)容可以被指令控制
      $scope.onLogin = function(user) {
         UserSrv.runLogin(user);
      };
  });

六粘姜、表達式
  1.表達式和eval(javascript)非常相似,但由于表達式是由AS來處理熔酷,他們有以下顯著不同的特性:
 」陆簟(1)所有表達式都在其所屬的作用域的內(nèi)部執(zhí)行,并有訪問本地$scope的權(quán)限
 【苊亍(2)如果表達式發(fā)生了typeError和referenceError并不會拋出異常
 『畔浴(3)不允許使用任何流程控制功能(條件控制臭猜,if/else)
  (4)可以接受過濾器和過濾器鏈

2術(shù)語解釋:
 ⊙涸椤(1)$parse:這是一個內(nèi)部服務蔑歌,可以對表達式進行運算,這個服務能夠訪問當前所處的作用域-----表示未看懂
七揽碘、過濾器
  1.過濾器的使用方式:
 〈瓮馈(1)直接寫在HTML中,通過|分割
 ■ù獭(2)在JS代碼中通過$filter來調(diào)用過濾器劫灶,示例代碼如下:

app.controller('DemoController', ['$scope', '$filter',
  function($scope, $filter) {
     $scope.name = $filter('lowercase')('Ari');
  }]);

(3)使用filter過濾器

注:使用filter過濾器時可根據(jù)第一個參數(shù)可以分三種情況:
  (1)字符串
 ∫磋搿(2)對象
 ”净琛(3)函數(shù)

2.表單驗證

注:AS中的表達式驗證,比如:模式匹配滞详,只有在用戶輸入的符合正則表達式時才能獲得其值凛俱,若輸入的不正確則一直獲取不到輸入的值

如下是HTML代碼:

<input type="type" placeholder="請輸入手機號"  ng-model="myTel" ng-pattern="/^1[3|4|5|7|8][0-9]{9}$/"/>
            <span>我輸入的是:{{ myTel }}</span>

如下是JS代碼:

angular.module('myApp',[])
  .controller('myCtrl',function($scope){
    $scope.myTel='';
    $scope.$watch('myTel',function(newVal,oldVal){
        console.log('新值:'+newVal);
        console.log('舊值:'+oldVal);
    });
  });

如下是運行截圖:

輸入不符合正則表達式.png

輸入符合正則表達式.png

相關(guān)文章的鏈接:http://www.cnblogs.com/rohelm/p/4033513.html

3.有關(guān)表達驗證的綜合案例(注:下述兩個例子不是特別好紊馏,因為不簡潔料饥,AS1.3之后推薦ngMessages)
根據(jù)用戶的輸入進行實時驗證(參考AngularJS權(quán)威教程.pdf 7.2節(jié)表單驗證)
如下是HTML代碼:

<!-- novalidate屬性規(guī)定當提交表單時不對表單數(shù)據(jù)(輸入)進行驗證。 -->
        <!-- ng-submit當提交表單時會調(diào)用signupForm函數(shù) -->
        <form name="signup_form" novalidate ng-submit="signupForm()">  
            <!-- fieldset標簽會在相關(guān)表單元素周圍繪制邊框 -->
            <fieldset>
                <legend>Signup Form</legend>
                <button type="submit" class="button radius">Submit</button>
                <div class="row">
                    <div class="large-12 columns">
                        <label>Your Name</label>
                        <input type="text" placeholder="name" name="name" ng-model="signup.name" ng-minlength="3" ng-maxlength="20" required />
                        <div class="error" ng-show="signup_form.name.$dirty && signup_form.name.$invalid">
                            <small class="error" ng-show="signup_form.name.$error.required">
                            你的名字是必填的
                            </small>
                            <small class="error" ng-show="signup_form.name.$error.minlength">
                            你的名字至少為3個字符
                            </small>
                            <small class="error" ng-show="signup_form.name.$error.maxlength">
                            你的名字不能超過20個字符
                            </small>
                        </div>
                    </div>
                </div>
            </fieldset>
        </form>

運行結(jié)果截圖:

頁面剛打開時.png
當輸入不滿足minlength要求時.png
輸入符合驗證要求時.png
輸入不符合maxlength要求時.png

根據(jù)用戶的輸入進行失去焦點時的驗證
對應的HTML代碼:

<!-- novalidate屬性規(guī)定當提交表單時不對表單數(shù)據(jù)(輸入)進行驗證朱监。 -->
        <!-- ng-submit當提交表單時會調(diào)用signupForm函數(shù) -->
        <form name="signup_form" novalidate ng-submit="signupForm()">  
            <!-- fieldset標簽會在相關(guān)表單元素周圍繪制邊框 -->
            <fieldset>
                <legend>Signup Form</legend>
                <button type="submit" class="button radius">Submit</button>
                <div class="row">
                    <div class="large-12 columns">
                        <label>Your Name</label>
                        <!-- ng-class:用于給 HTML 元素動態(tài)綁定一個或多個 CSS 類,其值可以是對象岸啡,需要使用 key-value 對,key 為你想要添加的類名赫编,value 是一個布爾值巡蘸。只有在 value 為 true 時類才會被添加。 -->
                        <input type="text" ng-class="{error : signup_form.name.$dirty && signup_form.name.$invalid}" placeholder="name" name="name" ng-model="signup.name" ng-focus ng-minlength="3" ng-maxlength="20" required />
                        <div class="error" ng-show="signup_form.name.$dirty && signup_form.name.$invalid && !signup_form.name.$focused">
                            <small class="error" ng-show="signup_form.name.$error.required">
                            你的名字是必填的
                            </small>
                            <small class="error" ng-show="signup_form.name.$error.minlength">
                            你的名字至少為3個字符
                            </small>
                            <small class="error" ng-show="signup_form.name.$error.maxlength">
                            你的名字不能超過20個字符
                            </small>
                        </div>
                    </div>
                </div>
            </fieldset>
        </form>

對應的JS代碼:

angular.module('myApp',[])
  /*ngFocus指令給表單輸入字段的blur和focus添加了對應的行為擂送,添加了一個名為ng-focus
ed的類悦荒,并將$focused的值設置為true。接下來嘹吨,可以根據(jù)表單是否具有焦點來展示獨立的錯
誤信息*/
  .directive('ngFocus',[function(){
     var FOCUS_CLASS='ng-focused'; 
     return {
        restrict:'A',
        require:'ngModel',
        link:function(scope,element,attrs,ctrl){
            ctrl.$focused=false;
            element.bind('focus',function(evt){
                element.addClass(FOCUS_CLASS);
                scope.$apply(function(){
                    ctrl.$focused=true;
                });
            }).bind('blur',function(evt){
                element.removeClass(FOCUS_CLASS);
                scope.$apply(function(){
                    ctrl.$focused=false;
                });
            });
        }
     }
  }]);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末搬味,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蟀拷,更是在濱河造成了極大的恐慌碰纬,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件问芬,死亡現(xiàn)場離奇詭異悦析,居然都是意外死亡,警方通過查閱死者的電腦和手機此衅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門强戴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來亭螟,“玉大人,你說我怎么就攤上這事酌泰∶接叮” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵陵刹,是天一觀的道長默伍。 經(jīng)常有香客問我,道長衰琐,這世上最難降的妖魔是什么也糊? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮羡宙,結(jié)果婚禮上狸剃,老公的妹妹穿的比我還像新娘。我一直安慰自己狗热,他們只是感情好钞馁,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著匿刮,像睡著了一般僧凰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上熟丸,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天训措,我揣著相機與錄音,去河邊找鬼光羞。 笑死绩鸣,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的纱兑。 我是一名探鬼主播呀闻,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼潜慎!你這毒婦竟也來了捡多?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤勘纯,失蹤者是張志新(化名)和其女友劉穎局服,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體驳遵,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡淫奔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了堤结。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片唆迁。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡鸭丛,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出唐责,到底是詐尸還是另有隱情鳞溉,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布鼠哥,位于F島的核電站熟菲,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏朴恳。R本人自食惡果不足惜抄罕,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望于颖。 院中可真熱鬧呆贿,春花似錦、人聲如沸森渐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽同衣。三九已至竟块,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間乳怎,已是汗流浹背彩郊。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工前弯, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蚪缀,地道東北人。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓恕出,卻偏偏與公主長得像询枚,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子浙巫,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容