AngularJS學習筆記

1、什么是angularjs

  • AngularJS是一個框架(諸多類庫的集合)以數據和邏輯做為驅動(核心)。
  • AngularJS有著諸多特性,最為核心的是:MVC、模塊化、雙向數據綁定、指令系統、依賴注入等。

2、為什么使用angular

先看一個例子

<input type="text" ng-model = "name"> <p>{{name}}</p>
<script type="text/javascript"> var myapp = angular.module('myapp',[]); <script> src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js" charset="utf-8"></script>

當頁面加載完畢后,AngularJS自動開始執行
HTML頁面中,ng-xxx的屬性稱之為指令(Driective)
ng-app 告訴AngularJS該標簽是ng的應用程序管理的邊界
ng-model 指令把文本框的值value綁定到user.name上
{{user.name}} 表達式用來取出綁定在user.name上面的值,顯示在頁面

(2)angular語法

  • 定義一個應用
    <html lang="en" ng-app = "myapp">
  • 定義一個模塊
    var myapp = angular.module('myapp',[]);

第一個參數是控制器的名稱,第二個參數是執行時會執行的函數

  • 定義控制器
    myapp.controller('myCtrl',["$scope",function($scope){ }])

為應用中的模型設置初始狀態,通過$scope(上下文模型)對象把數據模型或函數行為暴露給視圖

  • 表達式
    {{}}

它們可以包含文字、運算符和變量
如 {{ 1 + 2 }} 或 {{ ‘hello ’+ ‘,world’}}

指令

ng-xxx

ng-bind 來實現模型(Model)數據向視圖模板(View)的綁定
ng-init 初始化模型(Model)也就是$scope。
ng-click、ng-dblclick 點擊事件/雙擊
ng-show/hide控制元素是否顯示,true顯示、false不顯示
ng-repeat 重復 可以將數組或對象數據迭代到視圖模板中
ng-class控制類名
ng-switch、on、ng-switch-when 可以對數據進行篩選。
自定義指令
app.directive('xxx',function(){})
restrict 定義指令的聲明方式 'E'元素 'A' 屬性
replace 如果指令作為標簽,替換標簽本身
transclude 如果標簽內部有內容,如何替換
template/ templateUrl 模板 / 模板的url
$templateCache 緩存模板
link 通過link可以給dom元素綁定事件

作用域

  • 根作用域

整個應用范圍(ng-app所在標簽以內)都是可以被訪問到的。

  • 子作用域

通過ng-controller指令可以創建一個子作用域,新建的作用域可以訪問其父作用域的數據。
`
<div class="d2" ng-controller = 'myCtrl2'>
<p>{{name}}</p>

  <p>{{name1}}</p>
  <p>{{age}}</p>
  </div>
  <script type="text/javascript">
    var myapp = angular.module('myapp',[]);
    myapp.controller('myCtrl',function($scope){
      $scope.name = '張三';
    })
    myapp.controller('myCtrl2',function($scope){
      $scope.name1 = 'ls';
      $scope.age = 23;
    })
  </script>

`

過濾器

{{ | }}

| 來過濾

  • 內置過濾器
    1、currency將數值格式化為貨幣格式
    2、date日期格式化,'yyyy-MM-dd hh:mm:ss'
    3、filter 篩選 并返回一個新數組,其條件可以是一個字符串、對象、函數
    4、json將Javascrip對象轉成JSON字符串。
    5、limitTo取出字符串或數組的前(正數)幾位或后(負數)幾位
    6、lowercase/uppercase將文本轉換成小/大寫格式
    7、number數字格式化,可控制小位位數
    8、orderBy對數組進行排序,第2個參數可控制方向
  • 自定義過濾器

通過模塊對象實例提供的filter方法自定義過濾器。
`
<p>{{'你好'| bf}}</p>
<script type="text/javascript">
var myapp = angular.module('myapp',[]);
myapp.controller('myCtrl',function($scope){
myapp.filter('bf',function(){
return function(input){
return 'bf==>'+input;

      }
    })

`

服務

  • 內建服務
    1、$location是對原生Javascript中location對象屬性和方法的封裝。
    var myapp = angular.module('myapp',[]); myapp.controller('myCtrl',function($scope,$location){ $scope.absUrl = $location.absUrl(); $scope.protocol = $location.protocol(); $scope.port = $location.port(); $scope.path = $location.path(); $scope.hash = $location.hash(); $scope.search = $location.search(); })
    2、$timeout&$interval對原生Javascript中的setTimeout和setInterval進行了封裝。
    myapp.controller('myCtrl',function($scope,$timeout,$interval){ var timer = $timeout(function(){ $scope.now = new Date(); },1000) var timer2 = $interval(function(){ $scope.current = new Date() },1000) }
    3、$log打印調試信息
    4、$http用于向服務端發起異步請求。
    var app = angular.module('myApp', []); app.controller('siteCtrl', function($scope, $http) { $http({ method: 'GET', url: '/someUrl' }).then(function successCallback(response) { // 請求成功執行代碼 }, function errorCallback(response) { // 請求失敗執行代碼 });
    5、$filter在控制器中格式化數據。
    myapp.controller('myCtrl',function($scope,$filter){ var dateFilter = $filter('date'); $scope.date = dateFilter(now,'yyyy-MM-dd hh:mm:ss'); }
  • 自定義服務

service方法
myapp.controller('myCtrl',['$scope','$filter','showTime',function($scope,$filter,showTime){ $scope.now = showTime; }]) myapp.service('showTime',['$filter',function($filter){ var date = new Date(); this.date = $filter('date')(date,'yyyy-MM-dd'); }])
factory方法
myapp.controller('myCtrl',['$scope','$filter','showTime',function($scope,$filter,showTime){ $scope.now = showTime; }]) myapp.factory('showTime',function($filter){ var date = new Date(); var dateFilter = $filter('date'); date = dateFilter(date,'yyyy/MM/dd'); return date; })

配置塊

  • 通過config方法實現對模塊的配置,AngularJS中的服務大部分都對應一個“provider”,用來執行與對應服務相同的功能或對其進行配置。
    比如$http==>$httpProvider、$location==>$locationPorvider

運行塊

  • 可以直接運行相應的服務模塊,AngularJS提供了run方法來實現。

路由

  • 引入路由
    <script src="lib/angular-route.js" charset="utf-8"></script>
  • 實例化模塊時,依賴注入ngRoute
    var app = angular.module('app',['ngRoute']);
  • 配置路由模塊
    app.config(['$routeProvider',function($routeProvider){ $routeProvider .when('/a',{ controller:'ACtrl', templateUrl:'a.html' }) .otherwise({ redirectTo:'/a' }); }])
  • 布局模板
    通過ng-view指令布局模板,路由匹配的視圖會被加載渲染到些區域。
    <div ng-view></div>
  • 路由參數

兩個方法匹配路由,分別是when和otherwise,when方法需要兩個參數,otherwise方法做為when方法的補充只需要一個參數。
第1個參數是一個字符串,代表當前URL中的hash值。
第2個參數是一個對象,配置當前路由的參數,如視圖、控制器等。
a、template 字符串形式的視圖模板
b、templateUrl 引入外部視圖模板
c、controller 視圖模板所屬的控制器
d、redirectTo跳轉到其它路由

帶參數的路由

獲取參數,在控制中注入$routeParams可以獲取傳遞的參數

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

推薦閱讀更多精彩內容