angular入門

angular簡介

  • angular是一個框架婉弹,諸多類庫的集合睬魂,以數(shù)據(jù)和邏輯為核心;

MVC

  • modal-view-controller 模型-視圖-控制器
  • 模型:服務(wù)端專門處理后臺傳入的數(shù)據(jù)镀赌;一般指操作數(shù)據(jù)庫
  • 控制器:將服務(wù)端處理好的數(shù)據(jù)傳給前端氯哮; 連接模型和視圖的橋梁;
  • 視圖:將內(nèi)容商佛、數(shù)據(jù)呈現(xiàn)給喉钢;HTML展示
  • 使用mvc框架,會更高效良姆,易于管理和高效

AngularJS應(yīng)用

  • 在任意DOM元素上使用一個屬性 ng-app,就可以定義一個AngularJS的應(yīng)用肠虽;
  • ng-app屬性所有的DOM元素所包含的所有子元素都屬于應(yīng)用的一部分;
  • 引用了angular框架下玛追,會引入一個全局對象税课,angular;
  • 在此對象下有若干對象痊剖,其中angular.module()可以實例化一個對象韩玩;
  • angular.module('App',[])兩個參數(shù):
    • 1:模塊化名稱
    • 2:依賴;[]暫時不依賴任何對象
  • 控制器App.controller()兩個參數(shù)
    • 1:名稱
    • 2:依賴;
      • 關(guān)于依賴,依賴的數(shù)組里陆馁,最后一個單元必須是一個函數(shù)
      • App.controller('DemoCtrl',[’$scope‘,function($scope){}])
    • $scope 就是我們所需要的 M找颓;

angular的內(nèi)置指令

  • ng-show 是通過 display:none 和 display:block來決定顯示和隱藏的
  • ng-if 如果ng-if='false',那么在HTML中就沒有了這個DOM節(jié)點了;
  • ng-class 值得類型可以是對象叮贩,并且此對象的屬性是真是存在的類樣式击狮,屬性值決定了此屬性是否應(yīng)用,true為應(yīng)用益老,false不應(yīng)用 ng-class={box:true,red:true}為應(yīng)用box這個類樣式
  • ng-include = “'aside.html'”;需要將aside.html用''包裹起來的帘不;
    • 瀏覽器端 JS不能夠讀取本地文件,因為瀏覽器JS是運行在客戶端的杨箭,出于安全考慮寞焙,是不允許讀取用戶磁盤文件的;
    • ng-include是通過ajax發(fā)出請求,得到數(shù)據(jù)的捣郊;
  • 表單禁用 disabled,只要屬性存在辽狈,不管是什么值,都表示禁用
    • input type='text' disabled 或者disabled=''true/false 呛牲;只要存在都是禁用
    • 在angular中刮萌,ng-disabled = 'true'表單禁用ng-disabled = 'false'表單應(yīng)用
  • 無值屬性:都可以進行設(shè)置屬性值娘扩;
    • ng-disabled
    • ng-readonly
    • ng-checked
    • ng-selected
  • ng-src 和 ng-href ;如果在HTML中直接寫src=《path》着茸,雖然在解析完成后地址會加載,但是會先報錯琐旁;

Angular自定義指令

  • angular是一個模塊實例
  • .controller()來定義一個模塊
  • .directive()來自定義屬性涮阔;
    <p cls></p>
    //自定義指令結(jié)構(gòu)
    App.directive('cls',function(){
        //return 回來是一個對象或者是函數(shù),通常情況下都是對象
        return {
            //E : element DOM元素
            //C: class
            //M: mark:注釋
            //A:attribute 屬性
            restrict:"A",
            replace:"true",//模板中的標簽會將HTML中的標簽進行替換
            template:"<h1>這是通過自定義指令添加的內(nèi)容</h1>"灰殴,
        }
    })

AngualrJS 雙向數(shù)據(jù)綁定

  • 通過表單元素添加 ng-model 屬性敬特;

  • ng-bind

  • 花括號(使用《》代替)

    • 《》是ng-bind的簡寫
    
         <input type="text" ng-model='name'>//input可以直接獲取module中的$scope.name的值
         <h1 ng-bind='name'></h1>
         <h2>《name》</h2>
    
  • 只有表單元素才可以從視圖向模型傳送數(shù)據(jù)

AngularJS數(shù)據(jù)處理

  • ng-switch = "item" === ng-switch on = "item"
  • 閃爍問題處理,可以添加 ng-cloak指令 <h1 ng-cloak>《name》</h1>;
  • angular 的遍歷
        <li ng-repeat='item in lists'>{{item}}</li>
        //或者是
        <li ng-repeat='item in lists'>
            <span ng-bind='item'></span>
        </li>

小知識點

  • 觸發(fā)臟值檢測 scope.$digest();監(jiān)聽視圖中的數(shù)據(jù)改變牺陶;ng-click事件內(nèi)部中自動封裝了這個檢測伟阔,也可以手動添加;
  • form 表單有默認的submit事件掰伸,通過回車就可以觸發(fā)皱炉;。form中如果有action狮鸭,那么在submit之后合搅,action也會重新發(fā)送一次請求居扒,會刷新頁面蟆盐,所以钻洒,當使用submit提交數(shù)據(jù)時,可以將默認的action刪除廊谓;
    <form ng-submit='show()'>
        <h1>todos</h1>
        <input class="new-todo" ng-model='msg' placeholder="What needs to be done?" autofocus>
    </form>
    //angularJS通過ng-model將V與M進行綁定;
    //所以input中的value值就等于$scope.msg; 所以實際上$scope.msg = $('input').val();只不過這一步是AngularJS內(nèi)部做的麻削;
    //所以`$scope.msg=""`就直接將input的val值置空了蒸痹;
  • AngularJS 遍歷,獲取當前元素的index值
    <ul class="todo-list">
            <li ng-repeat="item in tabs ">//item可以獲取當前元素
                <div class="view">
                    <input ng-click="change($index)" class="toggle" type="checkbox"> //$index 代表當前元素所對應(yīng)的index值
                    <label>《item.tab》</label>
                    <button  class="destroy"></button>
                </div>
            </li>
        </ul>
        
  • 在angular中呛哟,涉及到通過判斷而決定某個樣式顯示或隱藏時叠荠,盡量通過 ng-class="{attr:flag}"來決定,不用再在js中進行if判斷了扫责;

作用域

  • 根作用于 ng-app="App"所處的作用域

過濾器

  • 在AngularJS中使用過濾器格式化展示數(shù)據(jù)榛鼎,在“《》”中使用"|"來調(diào)用過濾器,使用“:”傳遞參數(shù);
  • 價格過濾器 《price|currency:'¥':1》;冒號后面是傳參數(shù)者娱,多個參數(shù)多個冒號鏈接抡笼,:1表示表劉一個小數(shù);
  • 時間過濾器 《now | date:"yyyy-MM-dd hh:mm:ss"》
  • 控制排序方向 《list | orderBy:"score":"true"》 true為反向排序黄鳍,false為正向排序推姻,默認為false;
  • 常用內(nèi)置過濾器

依賴注入

  • 采用 ‘注入’ 的方式可以解決開發(fā)過程中的依賴的關(guān)系框沟,成為依賴注入藏古;
  • 一般 注入是通過 ‘參數(shù)’ 的形式實現(xiàn)的;
  • $http$scope 一樣忍燥,也是AngularJS內(nèi)置的功能拧晕。可以提供發(fā)送異步請求的功能灾前;

服務(wù)(重點)

  • $AngularJS內(nèi)置的服務(wù)防症;ng- AngularJS 內(nèi)置的指令;
  • 常見的內(nèi)置服務(wù):需要在依賴中寫入哎甲,然后才可以使用
    • $scope
    • $interval
    • $timeout
    • $log
    • $http

$log 服務(wù) 調(diào)試信息的輸出

      $log.error('這是一個錯誤');
      $log.warn('這個一個警告');
      $log.log('這是一個console.log');
      $log.debug('這是一個調(diào)試');
      $log.info('這是一個普通內(nèi)容');

$timeout$interval

  • $timeout 服務(wù)蔫敲,延時顯示數(shù)據(jù),$interval 服務(wù):計時器
    App.controller('DemoCtrl',['$timeout','$log','$interval',function ($timeout,$log,$interval) {
       //$timeout是一個函數(shù)
       //延時3秒后顯示內(nèi)容;
       $timeout(function () {
           $log.info('我哈哈哈,我等了3秒')
       },3000);

       var i = 0;
       $interval(function () {
           $log.info(i++);
       },1000)
   }])

$http 專門發(fā)起異步請求

  • 2炭玫、在PHP中 $_POST 是專門接收 formData格式數(shù)據(jù)的奈嘿,即“Content-Type:application/x-www-form-urlencoded”; 但是不能接收 Content-Type:application/json;
  • 3、當headers為“Content-Type:application/x-www-form-urlencoded”時吞加,上傳的data格式為 data:"name=itcast&age=11";
  • 4裙犹、當headers為“Content-Type:application/json”時,傳遞的參數(shù)格式為:data:{"name":"itcast","name":18};

AngularJS $http總結(jié)

  1. $http發(fā)送請求的方式有3種:method:“get”/"post"/'jsonp';
  2. 參數(shù)的傳遞方式為:params:
get方式請求
  • "get"方式發(fā)送請求時衔憨,正常發(fā)送叶圃;參數(shù)以params:{name:'lisi',age:18}發(fā)送;
    • 不管以什么方式傳遞參數(shù),內(nèi)部都會轉(zhuǎn)換成 践图?name=lisi&age=18的形式
    • 在PHP中將傳入的參數(shù)以json對象的形式輸出
        $http({
          url:'./example.php',
          method:'get',
          params:{name:'lisi',age:18},
          
      }).success(function (data) {
          console.log(data);
      })
    //在PHP中代碼:
    $name = $_GET['name'];
    $age = $_GET['age'];
    $array = ['name'=>$name,'age'=>$age];
    //var_dump($array);
    //將傳遞的參數(shù)放到數(shù)組中,并將數(shù)組轉(zhuǎn)換成json對象格式進行輸出;
    echo json_encode($array);
    //結(jié)果為:{name: "lisi", age: "18"}
post方式請求
  • “post”請求掺冠,需要注意兩點
    1. 設(shè)置請求頭:headers:“Content-Type:application/x-www-form-urlencoded”;

    2. 參數(shù)以data傳遞form data码党,data:“name=lisi&age=17”德崭;請求頭與參數(shù)必須保持一致;

           //post請求
           $http({
               url: './example.php',
               method: 'post',
               data: 'name=lisi&age=17',
               headers: {
                   'Content-Type': 'application/x-www-form-urlencoded'
               }
           }).success(function (data) {
               console.log(data);
           })
      
JSONP 的原理

前端傳遞一個實現(xiàn)定義好的函數(shù)名揖盘,給服務(wù)端眉厨,然后服務(wù)端接收這個函數(shù)名并拼湊一個“()”,并返回兽狭,前端就接收到了 這個函數(shù)的調(diào)用憾股;
在jQuery中鹿蜀,我們不寫callback的明細,ajax會自動幫我們生成一個荔燎,jQuery+序列號+時間戳等耻姥;但是在angularJS中,他們有幫我們封裝有咨,所以必須手動加上琐簇;

    $http({
            url:'./example.php',
            method:'jsonp',
            params:{
                //callback必須用'JSON_CALLBACK'進行占位,后端返回回調(diào)函數(shù):angular.callbacks._0(lisi)座享;這個回調(diào)函數(shù)的結(jié)果就是success時的data數(shù)據(jù)婉商;
                callback:'JSON_CALLBACK',
                name:'lisi',
                age:17
            }
        }).success(function (data) {
            console.log(data);
        }) 

自定義服務(wù),$service$factory

  • App.controller(); 內(nèi)置控制器
  • App.directive(); 內(nèi)置指令
  • App.filter(); 內(nèi)置過濾器
  • App.factory(); 內(nèi)置服務(wù)
  • App.service(); 內(nèi)置服務(wù)
  • App.config(); 配置塊
  • App.run(); 運行塊

配置塊和運行塊

  • App.config():一個參數(shù)渣叛,為數(shù)組丈秩;[];App.config([]);
    App.config(['$logProvider','$filterProvider',function ($logProvider,$filterProvider) {
    //通過$logProvider對$log進行配置;
    $logProvider.debugEnabled(false);
    $filterProvider.register('capitalize',function () {
       return function (input) {
           return (input[0].toUpperCase() + input.slice(1));
       }
    })
    }]);
    //這樣在配置好之后淳衙,在HTML中就可以直接使用‘capitalize’服務(wù)了
    <p ng-controller='DemoCtrl'> 《name | capitalize》</p>

運行塊

  • $rootScope: AngularJS的根作用域蘑秽,可定于全局變量
     App.run(['$rootScope',function ($rootScope) {
            $rootScope.name = '順治';
        }])
        //這個name在此文件中的任何一個控制器中都可以使用;

路由

  • 路由是URL地址與程序的映射關(guān)系箫攀;通過調(diào)整地址的變化肠牲,可以‘調(diào)用或執(zhí)行’ 某一具體的程序;
  • SPA:single page application 單頁面展示所有功能靴跛;
  • 多頁面最明顯的一個缺點就是每次更新頁面都要進行刷新缀雳,不能得到很好的用戶體驗;
  • AngularJS的路由是建立在單頁面的基礎(chǔ)之上的梢睛;
  • onhashchange:檢測地址欄中地址的變化肥印,綁在window上的
  • PHP中:file_get_contents('./views/'.$hash.'.html');獲取文件中的內(nèi)容
  • 錨鏈接就是點斷的路由,就是地址與程序的映射關(guān)系绝葡;

路由的配置

  • 路由經(jīng)過設(shè)置才能使用
  • 模塊需要依賴路由 var Music = angular.module('Music',['ngRoute']);
     <nav>
     //錨點中有參數(shù)的時候深碱,不會影響到路由;?
        <a href="#!/login?name=小明">登錄</a> //地址必須寫成  #藏畅!/的形式
        <a href="#!/register">注冊</a>
    </nav>
        <!-- ng-view 是一個占位符-->
    <div ng-view></div>
    
    var App = angular.module('App',['ngRoute']);
    //路由是需要配置才能使用;
    App.config(['$routeProvider',function ($routeProvider) {
        //兩個參數(shù)path 和 route
        //第一個參數(shù):路由
        //第二個參數(shù)是路由的配置
        $routeProvider.when('/register',{
            //template:"<h1>首頁</h1>",簡單的內(nèi)容
            templateUrl:'./views/register.html' //可以引入URL地址
            //為當前視圖文件分配控制器;
            controller:'RegisterCtrl',
        }).when('/login',{
            //template:"<h1>登錄</h1>",
            templateUrl:'./views/login.html'
        }).otherwise({
            //如果都不符合,可以設(shè)置默認值
            redirectTo:'/register'
        })
    }])
    
    App.controller('RegisterCtrl',['$scope',function ($scope) {
        $scope.title = '注冊';
    }])
    
    //然后在register.html頁面中就可以直接進行數(shù)據(jù)綁定 <h1>《title》</h1>;
  • 可以使用路由敷硅,也就是說開發(fā)者可以根據(jù)地址的變化執(zhí)行不同的業(yè)務(wù)邏輯;路由需要 配置 后才能被使用墓赴;

  • 使用when方法監(jiān)聽地址的變化竞膳,然后處理相應(yīng)的邏輯航瞭;

  • 參數(shù)傳遞可以有兩種方式诫硕,一種方式是通過地址傳參:

    • 地址傳參:其格式為?key1=val&key2=val2;.when('/login?name=lisi&age=17')

    • 通過路由傳參: 路由/:參數(shù)名

    • !?睢章办!注意:地址的格式(/login/:name/:pass)必須與路由的格式(#!/login/小明/12345)完全保持一致,一一對應(yīng);

        <a href="#!/login/小明/12345">登錄</a>
        .when('/login/:name/:pass',{
        
            //template:"<h1>登錄</h1>",
            templateUrl:'./views/login.html'
        })
    
    • 獲取路由中傳遞的參數(shù) var parameter = $routeParams;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末藕届,一起剝皮案震驚了整個濱河市挪蹭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌休偶,老刑警劉巖梁厉,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異踏兜,居然都是意外死亡词顾,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門碱妆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來肉盹,“玉大人,你說我怎么就攤上這事疹尾∩先蹋” “怎么了?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵纳本,是天一觀的道長窍蓝。 經(jīng)常有香客問我,道長饮醇,這世上最難降的妖魔是什么它抱? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮朴艰,結(jié)果婚禮上观蓄,老公的妹妹穿的比我還像新娘。我一直安慰自己祠墅,他們只是感情好侮穿,可當我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著毁嗦,像睡著了一般亲茅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上狗准,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天克锣,我揣著相機與錄音,去河邊找鬼腔长。 笑死袭祟,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的捞附。 我是一名探鬼主播巾乳,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼您没,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了胆绊?” 一聲冷哼從身側(cè)響起氨鹏,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎压状,沒想到半個月后仆抵,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡种冬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年肢础,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片碌廓。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡传轰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出谷婆,到底是詐尸還是另有隱情慨蛙,我是刑警寧澤,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布纪挎,位于F島的核電站期贫,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏异袄。R本人自食惡果不足惜通砍,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望烤蜕。 院中可真熱鬧封孙,春花似錦、人聲如沸讽营。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽橱鹏。三九已至膜蠢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間莉兰,已是汗流浹背挑围。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留糖荒,地道東北人杉辙。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像寂嘉,于是被迫代替她去往敵國和親奏瞬。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,435評論 2 359

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

  • AngularJS是什么泉孩?AngularJs(后面就簡稱ng了)是一個用于設(shè)計動態(tài)web應(yīng)用的結(jié)構(gòu)框架硼端。首先,它是...
    200813閱讀 1,611評論 0 3
  • Angular 簡介 什么是 AngularJS 一款非常優(yōu)秀的前端高級 JS 框架 最早由 Misko Heve...
    J_L_L閱讀 613評論 0 5
  • ng-model 指令ng-model 指令 綁定 HTML 元素 到應(yīng)用程序數(shù)據(jù)寓搬。ng-model 指令也可以:...
    壬萬er閱讀 875評論 0 2
  • 簡介# AngularJS 是一個為動態(tài)WEB應(yīng)用設(shè)計的結(jié)構(gòu)框架珍昨,提供給大家一種新的開發(fā)應(yīng)用方式,這種方式可以讓你...
    Simple_habits閱讀 578評論 0 9
  • 我的大學同學-呂珺句喷。鄂旗人民醫(yī)院使其家破人亡镣典,痛失愛妻,妻子叫苗昊媛唾琼,2017年2月22日13時02分兄春,入鄂...
    Brena閱讀 568評論 0 0