angularjs-雜項(xiàng)

Sublime 代碼編輯工具
Webstorm 代碼編輯工具 file setring 設(shè)置插件
Chrome 瀏覽器 Batarang調(diào)試工具
Github gitTortoise圖形化界面
Grunt Js文件合并智什、代碼壓縮,Ctrl+s 自動(dòng)執(zhí)行,Ctrl+s集成測(cè)試
Nodejs
Karma 單元測(cè)試 Jasmime單元測(cè)試

一、$http 服務(wù)使用

var myServiceApp = angular.module("MyServiceApp", []);
myServiceApp.factory('userListService', ['$http',
    function($http) {
        var doRequest = function(username, path) {
            return $http({
                method: 'GET',
                url: 'users.json'
            });
        }
        return {
            userList: function(username) {
                return doRequest(username, 'userList');
            }
        };
    }
]);
//自己定義的service放在最后
myServiceApp.controller('ServiceController', ['$scope', '$timeout', 'userListService',
    function($scope, $timeout, userListService) {
        var timeout;
        $scope.$watch('username', function(newUserName) {//監(jiān)控前臺(tái)數(shù)據(jù)變化
            if (newUserName) {
                if (timeout) {
                    $timeout.cancel(timeout);
                }
                timeout = $timeout(function() {
                    userListService.userList(newUserName)
                        .success(function(data, status) {
                            $scope.users = data;
                        });
                }, 350);
            }
        });
    }
]);

二、Filter實(shí)現(xiàn)

myModule.filter('filter1',function(){
    return function(item){
        return item + 'o()o';
    }
});  
<body>   {{'大漠窮秋'|filter1 }}
</body>
第二章 代碼總結(jié)
var bookStoreApp = angular.module('bookStoreApp', [
    'ngRoute', 'ngAnimate', 'bookStoreCtrls', 'bookStoreFilters',
    'bookStoreServices', 'bookStoreDirectives'
]);

bookStoreApp.config(function($routeProvider) {
    $routeProvider.when('/hello', {
        templateUrl: 'tpls/hello.html',
        controller: 'HelloCtrl'
    }).when('/list', {
        templateUrl: 'tpls/bookList.html',
        controller: 'BookListCtrl'
    }).otherwise({
        redirectTo: '/hello'
    })
});

一彰导、Directive示例
1.Link函數(shù)和scope

var app=angular.module("helloWordApp",[]);
app.controller('MainCtrl',function($scope){
    $scope.color="red";
});
app.directive("helloWord",function(){
    return {
        restrict:'AE',//A屬性E元素template替換,Cclass煌张,默認(rèn)A
        replace:true,//替換掉自己的標(biāo)簽
     template:'<p style="background-color:{{color}}">hellorWord</p>',
    //link函數(shù)主要用來為DOM元素添加事件監(jiān)聽苛白、監(jiān)視模型屬性變化娃豹、以及更新DOM
        link: function(scope,elem,attrs ){ //scope就是父controller的scope。
            elem.bind('click',function(){
               elem.css('background-color','white');
                scope.$apply(function(){
                    scope.color="white";
                });
            });
            elem.bind('mouseover',function(){
                elem.css('cursor','pointer');
            });
        }
    };
});
<div ng-controller="MainCtrl">
    <input type="text" ng-model="color"  placeholder="Enter aColor"/>
    <hello-word/>
</div>

2.Compile
compile 函數(shù)在 link 函數(shù)被執(zhí)行之前用來做一些DOM改造购裙。它接收下面的參數(shù):
?tElement – 指令所在的元素
?attrs – 元素上賦予的參數(shù)的標(biāo)準(zhǔn)化列表
要注意的是 compile 函數(shù)不能訪問 scope懂版,并且必須返回一個(gè) link 函數(shù)。

app.directive('test', function() {
    return {
        compile: function(tElem,attrs) {
            //do optional DOM transformation here
            return function(scope,elem,attrs) {
                //linking function here
            };
        }
    };
});

3.其他兩種改變作用域的例子,默認(rèn)false繼承不隔離躏率,true繼承隔離{}隔離

app.directive('helloWorld', function() {
    return {
        scope: true,
// use a child scope that inherits from parent
        restrict: 'AE',
        replace: 'true',
        template: '<h3>Hello World!!</h3>'
    };
});
app.directive('helloWorld', function() {
    return {
        scope: {},  // use a new isolated scope躯畴,父作用域無法看到子作用域,完全隔離
        restrict: 'AE',
        replace: 'true',
        template: '<h3>Hello World!!</h3>'
    };
});

4.例子

var expanderModule=angular.module('expanderModule', [])
expanderModule.directive('expander', function() {
    return {
        restrict : 'EA',
        replace : true,
        transclude : true,
        scope : {
            title : '=expanderTitle'
        },
        template : '<div>'
        + '<div class="title" ng-click="toggle()">{{title}}</div>'
        + '<div class="body" ng-show="showMe" ng-transclude></div>'
        + '</div>',
        link : function(scope, element, attrs) {
            scope.showMe = false;
            scope.toggle = function toggle() {
                scope.showMe = !scope.showMe;
            }
        }
    }
});
expanderModule.controller('SomeController',function($scope) {
    $scope.title = '點(diǎn)擊展開';
    $scope.text = '這里是內(nèi)部的內(nèi)容薇芝。';
});

HTML代碼:

    <div ng-controller='SomeController'>
    <expander class='expander' expander-title='title'>
    {{text}}
</expander>
</div>

5.Transclude指定替換的位置ng-transclude

var app = angular.module("app", [])
    .directive("hello", function () {
        var option = {
            restrict: "AECM",
            template: "<h3>Hello, Directive, <span ng-transclude></span></h3>",
            replace: true,
            transclude: true
        };
        return option;
    })
<hello>12345678</hello>
//替換為了
<h3>Hello, Directive, <span ng-transclude=""><span class="ng-scope">12345678</span></span></h3>

6.Scope配合@私股,=,&數(shù)據(jù)綁定
(1)@單向綁定

var myApp=angular.module('myApp',[]);
myApp.controller('listCtrl',function($scope){
    $scope.logchore="motorola";
});
myApp.directive('kid',function(){
    return {
        'restrict':'E',
        scope:{
            title:"@"
        },
        template:'<div >{{title}}</div>'

    }
});
<div ng-controller="listCtrl">
    <input type="text"  ng-model="t" />
    <kid title="{{t}}" >  //這個(gè)必須指定的恩掷,這里的title是指令里scope的@對(duì)應(yīng)的倡鲸,t就是控制域scope下的
    <span>我的angularjs</span>
    </kid>
    </div> 

(2)=雙向綁定

    <div ng-controller="listCtrl">
    <input type="text"  ng-model="t" />
    <kid title="t" > //和上面相比,這個(gè)直接賦值等于scope域下的t了
       <p>{{title}}</p>
       <span>我的angularjs</span>
       </kid>
    </div>
myApp.directive('kid',function(){
    return {
        'restrict':'E',
        scope:{
            title:"="
        },
        template:'<div >{{title}}</div>'

    }
});

(3)最后說&黄娘,這個(gè)是用來方法調(diào)用的

 <kid flavor="logchore(t)" ></kid>   
myApp.directive('kid',function(){
    return {
        'restrict':'E',
        scope:{
            flavor:"&"
        },
        template:'<div >    <input type="text"  ng-model="v" /> <button ng-click="flavor({t:v})"></button></div>'
    }
});
myApp.controller('listCtrl',function($scope){
    $scope.logchore=function(x){
        alert(x);
    };
});

7峭状、Controller

//controller
appControllers.controller('mainCtrl', ['$scope',
  function($scope) {
    $scope.changedTime = function(time) {
      alert(time);
    }
  }]).directive('timePicker',['$http', function($http) {
  return {
    restrict: 'AE',
    templateUrl: 'partials/time-picker.html',
    scope: true,
    controller: 'TimepickerDemoCtrl'
  };
}]);


//partials/time-picker.html:
<span ng-controller="TimepickerDemoCtrl">
    <timepicker ng-model="mytime" ng-change="changed()" hour-step="hstep" minute-step="mstep" show-meridian="ismeridian"></timepicker>
    </span>
//TimepickerDemoCtrl (copy from source):
var TimepickerDemoCtrl = function ($scope) {
  $scope.mytime = new Date();
  $scope.hstep = 1;
  $scope.mstep = 15;
  $scope.options = {
    hstep: [1, 2, 3],
    mstep: [1, 5, 10, 15, 25, 30]
  };
  $scope.ismeridian = true;
  $scope.toggleMode = function() {
    $scope.ismeridian = ! $scope.ismeridian;
  };
  $scope.update = function() {
    var d = new Date();
    d.setHours( 14 );
    d.setMinutes( 0 );
    $scope.mytime = d;
  };
  $scope.changed = function () {
    console.log('Time changed to: ' + $scope.mytime);
  };
}

8.一個(gè)重要的tab例子,涉及到controller作用域等

<body ng-app="components">
<h3>BootStrap Tab Component</h3>
<tabs>
    <pane title="First Tab">
        <div>This is the content of the first tab.</div>
    </pane>
    <pane title="Second Tab">
        <div>This is the content of the second tab.</div>
    </pane>
</tabs>
</body>
angular.module('components', []).
    directive('tabs', function() {
        return {
            restrict: 'E',
            transclude: true,
            scope: {},
            controller: [ "$scope", function($scope) {
                var panes = $scope.panes = [];
                $scope.select = function(pane) {
                    angular.forEach(panes, function(pane) {
                        pane.selected = false;
                    });
                    pane.selected = true;
                }
                this.addPane = function(pane) {
                    if (panes.length == 0) $scope.select(pane);
                    panes.push(pane);
                }
            }],
            template:
            '<div class="tabbable">' +
            '<ul class="nav nav-tabs">' +
            '<li ng-repeat="pane in panes" ng-class="{active:pane.selected}">'+
            '<a href="" ng-click="select(pane)">{{pane.title}}</a>' +
            '</li></ul>' +
            '<div class="tab-content" ng-transclude></div></div>',
            replace: true
        };
    }).
    directive('pane', function() {
        return {
            require: '^tabs',//^在指令的上游查找控制器逼争,优床?當(dāng)前指令,沒有前綴誓焦,自身所提供的控制器中查找胆敞;本例是吧tabs中的控制器傳入
            restrict: 'E',
            transclude: true,
            scope: { title: '@' },
            link: function(scope, element, attrs, tabsCtrl) {
                tabsCtrl.addPane(scope);
            },
            template:
            '<div class="tab-pane" ng-class="{active: selected}" ng-transclude></div>',
            replace: true
        };
    })

二、Service示例
1.服務(wù)器請(qǐng)求http

angular.module('myApp.services', [])
    .factory('githubService', ['$http', function($http) {
      var githubUsername;
      var doRequest = function(path) {
        return $http({
          method: 'JSONP',
          url: 'https://api.github.com/users/' + githubUsername + '/' + path + '?callback=JSON_CALLBACK'
        });
      }
      return {
        events: function() { return doRequest('events'); },
        setUsername: function(newUsername) { githubUsername = newUsername; }
      };
    }]); 

2.一個(gè)音樂播放器服務(wù)

app.factory('player', ['audio', function(audio) {
  var player = {
    playing: false,
    current: null,
    ready: false,
    play: function(program) {
      // If we are playing, stop the current playback 
      if (player.playing) player.stop();
      var url = program.audio[0].format.mp4.$text; // from the npr API 
      player.current = program; // Store the current program 
      audio.src = url;
      audio.play(); // Start playback of the url 
      player.playing = true
    },
    stop: function() {
      if (player.playing) {
        audio.pause(); // stop playback 
        // Clear the state of the player 
        playerplayer.ready = player.playing = false;
        player.current = null;
      }
    }
  };
  audio.addEventListener('ended', function() {
    $rootScope.$apply(player.stop());
  }); 
  return player;
}]); 

二杂伟、Filter代碼示例
3.簡(jiǎn)單示例

{{'大漠窮秋'|filter1 }}
myModule.filter('filter1',function(){
    return function(item){
        return item + 'o(∩_∩)o';
    }
});  

三移层、Http請(qǐng)求示例
1.后臺(tái)請(qǐng)求數(shù)據(jù)

myModule.controller('LoadDataCtrl', ['$scope','$http', function($scope,$http){
   $http({
        method: 'GET',
        url: 'data.json'
    }).success(function(data, status, headers, config) {
        console.log("success...");
        console.log(data);
        $scope.users=data;
    }).error(function(data, status, headers, config) {
        console.log("error...");
    });
}]);
//前端
<div ng-controller="LoadDataCtrl">
   <ul>
      <li ng-repeat="user in users">
         {{user.name}}
      </li>
   </ul>
</div>

2.Service+后臺(tái)請(qǐng)求數(shù)據(jù)

var myServiceApp = angular.module("MyServiceApp", []);
myServiceApp.factory('userListService', ['$http',
    function($http) {
        var doRequest = function(username, path) {
            return $http({
                method: 'GET',
                url: 'users.json'
            });
        }
        return {
            userList: function(username) {
                return doRequest(username, 'userList');
            }
        };
    }
]);

myServiceApp.controller('ServiceController', ['$scope', '$timeout', 'userListService',
    function($scope, $timeout, userListService) {
        var timeout;
        $scope.$watch('username', function(newUserName) {
            if (newUserName) {
                if (timeout) {
                    $timeout.cancel(timeout);
                }
                timeout = $timeout(function() {
                    userListService.userList(newUserName)
                        .success(function(data, status) {
                            $scope.users = data;
                        });
                }, 350);
            }
        });
    }
]);
//前端
<div ng-controller="ServiceController">
  <label>用戶名</label>
  <input type="text" ng-model="username" placeholder="請(qǐng)輸入用戶名" />
  <pre ng-show="username">{{users}}</pre>
</div>

四、頁面跳轉(zhuǎn)傳參

$routeProvider.when('/gerenxiangqing/:userId', {templateUrl: 'xiangqing/gerenxiangqing.html',controller:'GeRenXiangQing', reloadOnSearch: false});
ziYuan.controller('GeRenXiangQing',function($scope,httpService,$routeParams){
    $scope.guanzhuInfo="關(guān)注";//button 顯示的信息
    $scope.id=$routeParams.userId;
    //判斷是否關(guān)注赫粥,然后顯示button信息
    httpService.events({id: $scope.id}, "userController/isGuanZhu")
               .success(function (data, status, headers, config) {
        if (data == 1) {//已關(guān)注
            $scope.guanzhuInfo = "已關(guān)注";
        } else if (data == 0) {//未關(guān)注
            $scope.guanzhuInfo = "關(guān)注";
        }
    }).error(function (data, status, headers, config) {
    });
 });

五观话、知識(shí)點(diǎn)
1.ng-repeat="message in messages track by $index"
$index $first $last
ng-class=”{‘selected’:true}”
2.ng-bing 等價(jià)于 {{}}
3.{{reverse()}} 方法可以直接調(diào)用
4.翻轉(zhuǎn)字符串 msg.split(“”).reverse().jion(“”);
5.服務(wù) value 可以改變,constant不可以變越平,factory比較常用频蛔,service
6..factory('githubService', ['$http', function($http) {
return {
msg:”fd”;
alertInfo:function(){alert(“fd”)}
}
};
}]);

service('githubService', ['$http', function($http) {
              return {
              msg:”fd”;
          alertInfo:function(){alert(“fd”)}
           }
      };
 }]); 
factory('githubService', ['$http', function($http) {
            return new dd();              
     };
 }]); 
//等價(jià)于
Function dd(){
    this.mgs=”fd”;
    this.alertInfo=function(){alert(“fd”)}
}

8.多個(gè)service共享數(shù)據(jù),Data是個(gè)共享的容器秦叛,比如購(gòu)物車的使用

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末晦溪,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子挣跋,更是在濱河造成了極大的恐慌三圆,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,816評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異嫌术,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)牌借,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門度气,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人膨报,你說我怎么就攤上這事磷籍。” “怎么了现柠?”我有些...
    開封第一講書人閱讀 158,300評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵院领,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我够吩,道長(zhǎng)比然,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,780評(píng)論 1 285
  • 正文 為了忘掉前任周循,我火速辦了婚禮强法,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘湾笛。我一直安慰自己饮怯,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評(píng)論 6 385
  • 文/花漫 我一把揭開白布嚎研。 她就那樣靜靜地躺著蓖墅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪临扮。 梳的紋絲不亂的頭發(fā)上论矾,一...
    開封第一講書人閱讀 50,084評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音杆勇,去河邊找鬼拇囊。 笑死,一個(gè)胖子當(dāng)著我的面吹牛靶橱,可吹牛的內(nèi)容都是我干的寥袭。 我是一名探鬼主播,決...
    沈念sama閱讀 39,151評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼关霸,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼传黄!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起队寇,我...
    開封第一講書人閱讀 37,912評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤膘掰,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體识埋,經(jīng)...
    沈念sama閱讀 44,355評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡凡伊,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了窒舟。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片系忙。...
    茶點(diǎn)故事閱讀 38,809評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖惠豺,靈堂內(nèi)的尸體忽然破棺而出银还,到底是詐尸還是另有隱情,我是刑警寧澤洁墙,帶...
    沈念sama閱讀 34,504評(píng)論 4 334
  • 正文 年R本政府宣布蛹疯,位于F島的核電站,受9級(jí)特大地震影響热监,放射性物質(zhì)發(fā)生泄漏捺弦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評(píng)論 3 317
  • 文/蒙蒙 一孝扛、第九天 我趴在偏房一處隱蔽的房頂上張望羹呵。 院中可真熱鬧,春花似錦疗琉、人聲如沸冈欢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽凑耻。三九已至,卻和暖如春柠贤,著一層夾襖步出監(jiān)牢的瞬間香浩,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評(píng)論 1 267
  • 我被黑心中介騙來泰國(guó)打工臼勉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留邻吭,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,628評(píng)論 2 362
  • 正文 我出身青樓宴霸,卻偏偏與公主長(zhǎng)得像囱晴,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子瓢谢,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評(píng)論 2 351

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理畸写,服務(wù)發(fā)現(xiàn),斷路器氓扛,智...
    卡卡羅2017閱讀 134,638評(píng)論 18 139
  • AngularJS是什么枯芬?AngularJs(后面就簡(jiǎn)稱ng了)是一個(gè)用于設(shè)計(jì)動(dòng)態(tài)web應(yīng)用的結(jié)構(gòu)框架。首先,它是...
    200813閱讀 1,592評(píng)論 0 3
  • AngularJS AngularJS概述 介紹 簡(jiǎn)稱:ng Angular是一個(gè)MVC框架 其他前端框架: Vu...
    我愛開發(fā)閱讀 2,333評(píng)論 0 8
  • 指令定義 對(duì)于指令千所,可以把它簡(jiǎn)單的理解成在特定DOM元素上運(yùn)行的函數(shù)狂魔,指令可以擴(kuò)展這個(gè)元素的功能。??我們可以自己...
    oWSQo閱讀 1,185評(píng)論 0 0
  • AngularJSAngularJS 是一個(gè) MV* 框架淫痰, 最適于開發(fā)客戶端的單頁面應(yīng)用最楷。它不是個(gè)功能庫,...
    一直以來都很好閱讀 894評(píng)論 0 0