angular.js 教程 -- 實例講解

来源:https://www.cnblogs.com/xuxiaoyu/archive/2019/03/27/10609132.html
-Advertisement-
Play Games

angular.js AngularJS [1] 誕生於2009年,由Misko Hevery 等人創建,後為Google所收購。是一款優秀的前端JS框架,已經被用於Google的多款產品當中。AngularJS有著諸多特性,最為核心的是:MVC(Model–view–controller)、模塊化 ...


angular.js

AngularJS [1] 誕生於2009年,由Misko Hevery 等人創建,後為Google所收購。是一款優秀的前端JS框架,已經被用於Google的多款產品當中。AngularJS有著諸多特性,最為核心的是:MVC(Model–view–controller)、模塊化、自動化雙向數據綁定、語義化標簽、依賴註入等等。 AngularJS 是一個 JavaScript框架。它是一個以 JavaScript 編寫的庫。它可通過 <script> 標簽添加到HTML 頁面。 AngularJS 通過 指令 擴展了 HTML,且通過 表達式 綁定數據到 HTML。

第一個實例    hello{{name}}

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="https://cdn.staticfile.org/angular.js/1.4.6/angular.min.js"></script>
</head>
<body>

<div ng-app="myapp">
     <p>名字 : <input type="text" ng-model="name"></p>
     <h1>Hello {{name}}</h1>
</div>

</body>
</html>

網頁載入完成,angularJS自動開啟

ng-app指令告訴angularJS,<div>元素是angularJS應用程式的“所有者”。

ng-model指令把輸入域的值綁定到應用程式變數name。

ng-bind指令把應用程式變臉name綁定到某個段落髮innerHTML。

雙向數據綁定

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <script src="https://cdn.staticfile.org/angular.js/1.4.6/angular.min.js"></script>
</head>
<body>
  <div ng-app="myApp" ng-controller="myCtrl">
    名: <input type="text" ng-model="firstName"><br>
    姓: <input type="text" ng-model="lastName"><br>
    <br>
    姓名: {{firstName + " " + lastName}} <!-- angular表達式 字元串-->
  </div>
  <script>
    var app = angular.module('myApp', []);
    app.controller('myCtrl', function ($scope) {
      $scope.firstName = "John";
      $scope.lastName = "Doe";
    });
  </script>
</body>
</html>

 

一,angular 表達式

1.angular對象

<div ng-app="" ng-init="person={firstName:'John',lastName:'Doe'}">
  <p>姓為 {{ person.lastName }}</p>
  <p>姓為 <span ng-bind="person.lastName"></span></p>
  <!-- 二者顯示結果相同。 -->
</div>

2.angular數組

<div ng-app="" ng-init="points=[1,15,19,2,40]">
    <p>第三個值為 {{ points[2] }}</p>
</div>

 

二,angular指令

AngularJS 指令是擴展的 HTML 屬性,帶有首碼 ng-

ng-app 指令初始化一個 AngularJS 應用程式。

ng-init 指令初始化應用程式數據。

ng-model 指令把元素值(比如輸入域的值)綁定到應用程式。

angular迴圈遍歷,ng-repeat 指令用在一個對象數組上:

<div ng-app="" ng-init="names=[
{name:'Jani',country:'Norway'},
{name:'Hege',country:'Sweden'},
{name:'Kai',country:'Denmark'}]">
    <p>迴圈對象:</p>
    <ul>
        <li ng-repeat="x in names">
            {{ x.name + ', ' + x.country }}
        </li>
    </ul>
</div>

 創建自定義的指令

除了angularJS內置的指令外,我們還可以創建自定義指令。

你可以使用.directive函數添加自定義指令。

要調用自定義指令,HTML元素上需要添加自定義指令名。

使用駝峰命名一個指令, runoobDirective, 但在使用它時需要以 - 分割, runoob-directive:

<body ng-app="myApp">
    <runoob-directive></runoob-directive>
    <script>
        var app = angular.module("myApp", []);
        app.directive("runoobDirective", function () {
            return {
                template: "<h1>自定義指令!</h1>",
                //replace : true,
                //restrict : "EACM"
            };
        });
    </script>
</body>
你可以通過以下方式來調用指令: a.元素名 b.屬性 c.類名 d.註釋 以下實例方式也能輸出同樣結果. 元素名:
<runoob-directive></runoob-directive>
屬性:
<div runoob-directive></div>
類名:
<div class="runoob-directive"></div>
註釋:
<!-- directive: runoob-directive -->

* replace 是一個可選參數,如果設置了這個參數,值必須為true,因為預設值為false。預設值意味著模板會被當作子元素插入到調用此指令的元素內部:

如:

<my-directive></my-directive>


.directive("myDirective",function(){
        return {
               template:"<h3>世上無難事,只怕有心人</h3>"
        }
})

調用指令之後的結果如下(這是預設replace為false時的情況):

<my-directive>
      <h3>世上無難事,只怕有心人</h3>
</my-directive>

如果replace被設置為了true:

.directive("myDirective",function(){
      return {
            replace:true,
            template:"<h3>世上無難事,只怕有心人</h3>"
      }
})

那麼指令調用後的結果將是:

<h3>世上無難事,只怕有心人</h3>

 

* restrict  可以限制你的指令只能通過特定的方式來調用。

restrict 值可以是以下幾種:

  • E 作為元素名使用
  • A 作為屬性使用
  • C 作為類名使用
  • M 作為註釋使用

restrict 預設值為 EA, 即可以通過元素名和屬性名來調用指令。

 

三,angularJS 九種內置過濾器

<!DOCTYPE html>
<html ng-app="App">

<head>
    <meta charset="UTF-8">
    <title>內置過濾器</title>
</head>

<body>
    <div ng-controller="controllerTest01">
        <ul>
            <!-- currency處理函數,price是第一個參數,“¥”是第二個參數。顯示的值是currency這個函數執行完成以後的返回值 -->
            <li>{{price|currency:"¥"}}</li>
            <li>{{nowdate|date:'yyyy/MM/dd hh:mm:ss EEEE'}}</li>
            <li>{{arr1|filter:'j'}}</li>
            <li>{{arr2|filter:{age:16} }}</li>
            <li>{{arr2|json }}</li>
            <li>{{arr1|limitTo:2}}</li>
            <li>{{str|uppercase|lowercase|limitTo:7}}</li>
            <li>{{num|number:2}}</li>
            <li>{{num2|number:4}}</li>
            <li>{{arr2|orderBy:"age":true}}</li>
        </ul>
    </div>

    <script src="https://cdn.staticfile.org/angular.js/1.4.6/angular.min.js"></script>
    <script>
        var App = angular.module("App", []);
        App.controller("controllerTest01", ['$scope', function ($scope) {
            // 內置過濾器  9個
            // 1. currency (貨幣處理),如果不傳遞參數,預設是美元符
            // 2. date (日期格式化)
            // 3. filter(匹配子串)
            // 4. json(格式化json對象)   跟stringify相同   沒有參數
            // 5. limitTo(限制數組長度或字元串長度)
            // 6. lowercase(小寫)   沒有參數
            // 7. uppercase(大寫)   沒有參數
            // 8. number(格式化數字)   [參數]
            // 9. orderBy(排序)  [name,boolean]

            $scope.price = 99.99;
            $scope.nowdate = new Date();
            $scope.arr1 = ['html', "css", 'js', "hhhh", "j", "c"];
            $scope.arr2 = [
                { name: "jack", age: 20 },
                { name: "mack", age: 16 },
                { name: "sunny", age: 18 }
            ]
            $scope.str = "Hello World";
            $scope.num = "10.23456";
            $scope.num2 = 123456789
        }])
    </script>
</body>

</html>

自定義過濾器:

<!DOCTYPE html>
<html ng-app="App">
<head>
    <meta charset="UTF-8">
    <title>自定義過濾器</title>
</head>
<body>
    <div ng-controller="controllerTest01">
        <h2>{{msg|demo:"abc":"bcd":"efg"}}</h2>
        <h3>{{val|firstUppercase:123}}</h3>
    </div>

    <script src="https://cdn.staticfile.org/angular.js/1.4.6/angular.min.js"></script>
    <script>
        var App = angular.module("App",[]); 
        // 定義控制器
        App.controller("controllerTest01",['$scope',function($scope){
            $scope.msg = " world"
            $scope.val = "hello world"
        }])
        //自定義指令
        // App.directive('指令名',function(){
        //     return{}
        // })

        // 自定義過濾器
        App.filter('demo',function(){
            return function(val,a,b,c){    //demo就是一個函數
                console.log(val)            //world
                console.log(a,b,c)            //abc bcd efg

                // 顯示值又是一個返回值
                return "hello" + val;
            } 
        })
        // 自定義過濾器,首字母大寫
        App.filter('firstUppercase',function(){
            return function(data,args){
                console.log(args)            //123
                return data[0].toUpperCase() + data.slice(1)
            }
        })
    </script>
</body>
</html>

 

四,angularJS  服務(Service)

<!DOCTYPE html>
<html ng-app="App">
<head>
    <meta charset="UTF-8">
    <title>內置服務-$location</title>
</head>
<body>
    <div ng-controller="controllerTest01">
        <ul>
            <li>絕對路徑:{{absurl}}</li>
            <li>服務:{{host}}</li>
            <li>查詢字元串(參數):{{search}}</li>
            <li>埠號:{{port}}</li>
            <li>協議:{{protocol}}</li>
            <li>哈希(錨點):{{hash}}</li>
        </ul>
    </div>

    <script src="https://cdn.staticfile.org/angular.js/1.4.6/angular.min.js"></script>
    <script>
        var App = angular.module("App",[]); 
        // $http   -- >   對ajax的一種封裝
        // $log    -->    對congsole的封裝
        // $timeout -->   定時器
        // $location    --> 對瀏覽器地址欄的封裝

        App.controller("controllerTest01",['$scope','$location',function($scope,$location){  
            console.log($location)
            $scope.absurl = $location.absUrl();
            $scope.host = $location.host();
            $scope.port = $location.port();
            $scope.search = $location.search();   //對http有要求
            $scope.protocol = $location.protocol();
            $scope.hash = $location.hash();
        }])

    </script>
</body>
</html>

內置服務——定時器

App.controller("controllerTest01",['$scope','$timeout','$interval',function($scope,$timeout,$interval){
    $timeout(function(){
        $scope.msg = "timeout執行了"
    },3000) 


    var timer = $interval(function(){
        $scope.datenow = new Date();
    },1000)
    $scope.stop = function(){
        $interval.cancel(timer)
    }
}])

 內置服務——filter

<div ng-controller="controller01">
    <ul>
        <li>{{price}}</li>
        <li>{{str}}</li>
        <li>{{str1}}</li>
    </ul>
</div>

<script src="https://cdn.staticfile.org/angular.js/1.4.6/angular.min.js"></script>
<script>
    var App = angular.module("App", []);
    App.controller("controller01", ['$scope', '$filter', function ($scope, $filter) {
        // $filter 可以引入九種內置的過濾器,這個是過濾器的第二種用法
        $scope.price = 99.99;
        var currency = $filter('currency');
        $scope.price = currency($scope.price);

        $scope.str = "hello angular";
        var uppercase = $filter('uppercase');
        $scope.str = uppercase($scope.str);

        $scope.str1 = $filter('limitTo')($scope.str, 5)
    }])

</script>

內置服務——http

App.controller("controller01",['$scope','$filter','$http',function($scope,$filter,$http){
    // $http 本質是對ajax的封裝,放到服務底下運行
    // 1.5以上使用then方法,類似於promise中的then
    // 1.5以下就直接使用success方法和error方法
    // $http({
    //     method: 'GET',
    //     url: './02.json',
    //     params : {    //get請求的參數
    //         uname : 'aaaa',
    //         age : 30
    //     }
    // }).then(function(data){
    //     console.log(data);     //封裝過的,該對象底下的data屬性放的是數據
    //     console.log(data.data);
    // },function(err){
    //     console.log(err)
    // });

    $http({    
        method : "POST",
        url : "/sendData",
        headers : {   //post請求最好設置請求頭
            "content-type" : "application/x-www-form-urlencoded"
        },
        data : {    //post請求的參數
            uname : "aaa",
            age : 30
        }
    }).then(function(data){
        console.log(data)
        console.log(data.data.data);   //想要的後臺的數據
    },function(err){
        console.log(err);
    })

}])

自定義服務:

要使用自定義服務,需要在定義控制器的時候獨立添加,設置依賴關係。

var App = angular.module("App", []);
  // 定義一個服務,格式化對象
  // {
  // name : "jack",
   // age : 30
   // }
   // ?name=jack&age=30
   App.factory('format', ["$filter", function ($filter) {
       function fm(data) { //val 是一個對象
         var str = "?";
         for (var key in data) {
             str += key + "=" + data[key] + '&';
         }
           str = str.slice(0, -1);
           return str;
       }
       function aaa() {
           console.log('hello')
       }
       // 返回一個對象出去
       return {
           format: fm,
           aaa: 

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 好久沒寫博客,從一道題目開始吧 實現一個sum函數,支持sum(1,2)和sum(1)(2)兩種調用方式 說實在的,沒啥難的,很簡單寫出來 或者用ES6的展開操作符,或者是arguments 考察的內容其實就是函數作為返回值,簡單涉及到了閉包,還有arguments的判斷,ES6展開操作符的剩餘語法 ...
  • async await的執行 註意: 本次代碼僅在 Chrome 73 下進行測試。 start 不瞭解 async await 的,先去看阮一峰老師的文章 "async 函數" 。 先來看一道 "頭條的面試題" ,這其實是考察瀏覽器的 event loop. 運行結果如下: Event Loop ...
  • webpack是一個現代JavaScript應用程式的靜態模塊打包器,借用官網的一張圖,它能夠將一些預處理語言,js的最新語法轉換成瀏覽器識別的內容。現在一般的前端框架都有比較成熟的腳手架,大多數對webpack都有個較好的集成,我們只需要敲一些簡單的命令就能生成一個通用的項目模板,比較便捷,但是要 ...
  • 數組扁平化 數組扁平化即將多維數組轉化為一維數組: 例: [1,2,3,4,5,[2,3,4,[6,10]]]==>[1,2,3,4,5,2,3,4,6,10]; 實現數組扁平化的方法有好幾種,在這裡只說一種我比較常用的,自己感覺比較核心的方法,即遍曆數組arr,若arr[i]為數組則遞歸遍歷,直至 ...
  • JavaScript歷史大概在1992年,一家稱作Nombas的公司開始開發一種叫做C–(C-minus-minus,簡稱Cmm)的嵌入式腳本語言。 Cmm背後的理念很簡單:一個足夠強大可以替代巨集操作(macro)的腳本語言,同時保持與C(和C++)中夠的相似性,以便開發人員能很快學會。 這個腳本語 ...
  • 1、首先,我們要準備HTML代碼: 這裡的<a>標簽裡面的href=“#top”就表示點擊它就可以回到頂部,就不寫回到頂部的代碼了 2、設置其CSS樣式: 一頓胡亂操作之後,“返回頂部”按鈕就有瞭如下這個外觀:,還怪好看的(不是 3、重點來了,jQuery代碼部分: 解釋一下:首先我們要做的功能是: ...
  • 一、DOM JavaScript語言核心。變數的定義、變數的類型、運算符、表達式、函數、if語句、for迴圈、演算法等等。這些東西都屬於語言核心,下次繼續學習語言核心就是面向對象了。JavaScript能做非常多的事情:DOM開發、Ajax開發、Canvas開發、NodeJS開發、前端框架(React ...
  • Hello, 大噶好, 小葵花媽媽課堂開課啦。。。。。。 我們日常工作中拿到的數據不可能是只有一維的平面數組, 百分之99.99 是數組裡嵌套數組再套數組的n維數組 ............................. 這種讓人想問候它xx的多維數組我們怎麼把它變成一維數組, 也就是只有一個中 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...