目錄
購物! !
{{pageHeading | titleCase}}
首頁 web前端 js教程 AngularJS語法詳解(續)_AngularJS

AngularJS語法詳解(續)_AngularJS

May 16, 2016 pm 04:18 PM
angularjs 文法

src和href屬性

Angularjs中src應寫成ng-src,href應寫成ng-href 例如:

複製程式碼 程式碼如下:

表達式

在模板中可以進行簡單的數學運算、比較運算、布林運算、位元運算、引用數組、和物件符號等儘管我們可以使用表達式做很多事情,但是表達式是使用一個自定義的解釋器來執行的(Angular的一部分),而不是用Javascript得eval()函數執行的,所以限制較大。
雖然很多方面這裡的表達式比Javascript更嚴格,但是他們對undefined和null的容錯性更好,如果遇到錯誤,模板只是簡單的什麼都不顯示,而不會拋出一個NullPointerException錯誤。 例如:

複製程式碼 程式碼如下:


   
{{computer() /10 }}
//雖然是合法的,但是它把業務邏輯放到模板中了,應避免這種做法

區分UI和控制器的職責

控制器是綁定在特定DOM片段上的,這些片段就是他們需要負責管理的內容。有兩種主要的方法可以把控制器關聯到DOM節點上,一種在模板中透過ng-controller聲明,第二種是透過路由把它綁定到一個動態載入的DOM模板片段上,這個模板叫視圖。 我們可以創建嵌套的控制器,他們可以透過繼承數結構來共享資料模型和函數,真實的嵌套發生在$scope物件上,透過內部的原始繼承機制,父控制器物件的$scope會被傳遞到內部嵌套的$scope(所有屬性,包括函數)。例如:

複製程式碼 程式碼如下:


   
...


利用$scope暴漏模型資料

可以顯示建立$scope屬性,例如$scope.count = 5。也可以間接的透過模板本身創建資料模型。

透過表達式。例如

複製程式碼 程式碼如下:


在表單項目上使用ng-model

與表達式類似,ng-model上指定的模型參數同樣工作在外層控制器內。唯一的不同點在於,這樣會在表單項目和指定的模型之間建立雙向綁定關係。

使用watch監控資料模型的變化

$watch的函數簽名是: $watch(watchFn,watchAction,deepWatch)
watchFn是一個帶有Angular表達式或函數的字串,它會傳回被監控的資料模型的目前值。 watchAction是一個函數或表達式,當watchFn發生變化時被呼叫。其函數簽名為:
function(newValue,oldValue,scope) deepWatch 如果設定為true,這個可選的布林值參數將會指令Angular去檢查被監控物件的每一個屬性是否改變了。如果你向監控陣列中的元素,或物件上的所有屬性,而不是值監控一個簡單的值,你就可以使用這個參數。請注意,Angular需要遍歷數組或對象,如果集合比較大,那麼運算複雜呢就會比較的重。

$watch函數會回傳一個函數,當你不需要接收變更通知時,可以用這個傳回的函數來註銷監控器。
如果我們需要監控一個屬性,然後接著註銷監控,我們就可以使用以下的程式碼: var dereg = $scope.$watch('someModel.someProperty',callbackOnChange());
... dereg();

實例程式碼如下:

複製程式碼 程式碼如下:



    您的購物車標題>
   
        函數 CartController($scope) {
            $scope.bill = {};
            $scope.items = [
                {則以 {方式與油漆盆』,數量:8,價格:3.95},
                {則為:'圓點',數量:17,價格:12.95},
                {則為:'鵝卵石與數量:5,價格:6.95}
            ];
            $scope.totalCart = function() {
                var 總計 = 0;
                for (var i=0,len=$scope.items.length;i                     總計 = 總計 $scope.items[i].price * $scope.items[i].quantity;
                }
                回報總計;
            }
            $scope.subtotal = function() {
                返回 $scope.totalCart() - $scope.bill.discount;
            }
            函數calculateDiscount(newValue,oldValue,scope) {
                $scope.bill.discount = newValue > 100? 10 : 0;
            }//這裡的watchAction函數
            $scope.$watch($scope.totalCart,calculateDiscount);//這裡的watch函數
        }
    腳本>
頭>

   

       

            {{item.title}}
           
            {{item.price |幣}}
            {{商品.價格 * 商品.數量 |貨幣}}
       

       
總計:{{totalCart()|貨幣 }}

       
折扣:{{bill.discount |貨幣}}

       
小計:{{小計() |幣}}

   

    腳本>
身體>

上面的watch有效能問題,calculateTotals函數執行了6次,其中三次是因為循壞,每次循環,都會重新渲染資料。
下面是改進後的程式碼

複製程式碼程式碼如下:



    您的購物車標題>
   
        函數 CartController($scope) {
            $scope.bill = {};
            $scope.items = [
                {則以 {方式與油漆盆』,數量:8,價格:3.95},
                {則為:'圓點',數量:17,價格:12.95},
                {則為:'鵝卵石與數量:5,價格:6.95}
            ];
            var TotalCart = function() {
                var 總計 = 0;
                for (var i=0,len=$scope.items.length;i                     總計 = 總計 $scope.items[i].price * $scope.items[i].quantity;
                }
                $scope.bill.totalcart = 總計;
                $scope.bill.discount = 總計 > 100? 10:0;
                $scope.bill.subtotal = 總計 - $scope.bill.discount;
            }
            $scope.$watch('items',totalCart,true);//只用watch著items的變化
        }
    腳本>
頭>

   

       

            {{item.title}}
           
            {{item.price |幣}}
            {{商品.價格 * 商品.數量 |貨幣}}
       

       
總計:{{bill.totalcart|貨幣 }}

       
折扣:{{bill.discount |貨幣}}

       
小計:{{bill.subtotal |幣種}}

   

    腳本>
身體>

對於大型的itms吞吐量來說,如果每次在Angular顯示頁面時只重新計算bill屬性,那麼效能會好很多。透過建立一個帶有watchFn的$watch函數,我們可以實現這一點。

複製程式碼程式碼如下:

$scope.$watch(
    var totalCart = function() {
                var total = 0;
                for (var i=0,len=$scope.items.length;i                     total = total $scope.items[i].price * $scope.items[i].quantity;
;                 }
                $scope.bill.totalcart = total;
                $scope.bill.discount = total > 100 ? 10 :0;
                $scope.bill.subtotal = total - $scope.bill.discount;
            });

監控多東西

如果你想監控多個屬性或對象,並且當其中任何一個發生變化時就會去執行一個函數,你有兩種基本的選擇:

監控把這些屬性連接起來之後的值

把他們放在一個陣列或物件中,然後給deepWAtch參數傳遞一個值

分別說明:
在第一種情況下,如果你的作用域中存在一個things對象,它帶有兩個屬性a和b,當這兩個屬性發生變化時都需要執行callMe()函數,你可以同時監控這兩個屬性$scope.$watch('things.a things.b',callMe(...));
當清單非常長,你需要寫一個函數來傳回連線之後的值。

在第二種情況下,需要監控things物件的所有屬性,你可以這麼做:

複製程式碼 程式碼如下:

$scope.$watch('things',callMe(...),true);

使用module組織依賴關係

provider(name,Object OR constructor()) 說明: 一個可設定的服務,建立邏輯比較的複雜。如果你傳遞了一個Object作為參數,那麼這個Object物件就必須帶有一個名為$get的函數,而這個函數需要回傳服務的名稱。否則,angularjs會認為你傳遞的時一個建構函數,呼叫建構函數會回傳服務實例物件。
factory(name,$get Function()) 說明:一個不可設定的服務,創造邏輯比較的複雜。你需要指定一個函數,當呼叫這個函數時,會傳回服務實例。可以看成provider(name,{$get:$getFunction()})的形式。
service(name,constructor()) 一個不可設定的服務,創造邏輯比較的簡單。與上面的provider函數的constructor參數類似,Angular呼叫他可以建立服務實例。

使用module factory的例子

複製程式碼 程式碼如下:



您的購物車標題>
腳本>

    var ShoppingModule = angular.module('ShoppingModule',[]);
    ShoppingModule.factory('Items',function() {
        var items = {};
        items.query = function() {
            返回[
                {title:'油漆罐',description:'裝滿油漆的罐子』,價格:3.95},
                {title:'油漆罐',description:'裝滿油漆的罐子』,價格:3.95},
                {title:'油漆罐',description:'裝滿油漆的罐子』,價格:3.95}
            ];
        };
        退貨;
    });
    函數 ShoppingController($scope,Items) {
        $scope.items = Items.query();
    }
腳本>
頭>

購物! !



   
        {{item.title}}
        {{item.description}}
        {{商品價格 |貨幣}}
   
表>
身體>

引入第三方模組

在大多數應用程式中,創建供所有程式碼使用的單一模組,並將所有依賴的東西放入這個模組中,這樣就會運作得很好。但是,如果你打算使用第三方包提供的服務或指令,他們一般都標有自己的模組,你需要在應用程式模組中定義依賴關心才能引用他們。 例如:
var appMod = angular.module('app',['Snazzy','Super']);

關於過濾器的例子

複製程式碼程式碼如下:



您的購物車標題>
腳本>

    var ShoppingModule = angular.module('ShoppingModule',[]);
    ShoppingModule.filter('titleCase',function() {
        var titleCaseFilter = 函數(輸入) {
            var Words = input.split(' ');
            for(var i=0;i                 字[i] = 字[0].charAt(0).toUpperCase() 字[i].slice(1);
            }
            return Words.join(' ');
        };
        回 titleCaseFilter;
    });
    函數 ShoppingController($scope) {
        $scope.pageHeading = '這是測試案例';
    }
腳本>
頭>

{{pageHeading | titleCase}}


身體>

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1317
25
PHP教程
1268
29
C# 教程
1246
24
如何快速地把你的 Python 程式碼變成 API 如何快速地把你的 Python 程式碼變成 API Apr 14, 2023 pm 06:28 PM

提到API開發,你可能會想到DjangoRESTFramework,Flask,FastAPI,沒錯,它們完全可以用來寫API,不過,今天分享的這個框架可以讓你更快把現有的函數轉化為API,它就是Sanic 。 Sanic簡介Sanic[1],是Python3.7+Web伺服器和Web框架,旨在提高效能。它允許使用Python3.5中添加的async/await語法,這可以有效避免阻塞從而達到提升響應速度的目的。 Sanic致力於提供一種簡單且快速,集創建和啟動於一體的方法

2022年最新5款的angularjs教學從入門到精通 2022年最新5款的angularjs教學從入門到精通 Jun 15, 2017 pm 05:50 PM

Javascript 是一個非常有個性的語言. 無論是從程式碼的組織, 還是程式碼的程式設計範式, 或物件導向理論都獨具一格. 而很早就在爭論的Javascript 是不是物件導向語言這個問題, 顯然已有答案. 但是, 即使Javascript 叱吒風雲二十年, 如果想要看懂jQuery, Angularjs, 甚至是React 等流行框架, 觀看《黑馬雲課堂JavaScript 高級框架設計視頻教程》就對了。

lambda 表達式的語法和結構有什麼特色? lambda 表達式的語法和結構有什麼特色? Apr 25, 2024 pm 01:12 PM

Lambda表達式是無名稱的匿名函數,其語法為:(parameter_list)->expression。它們具有匿名性、多樣性、柯里化和閉包等特徵。在實際應用中,Lambda表達式可用於簡潔地定義函數,如求和函數sum_lambda=lambdax,y:x+y,並透過map()函數應用於列表來進行求和操作。

使用PHP和AngularJS建立響應式網站,提供優質的使用者體驗 使用PHP和AngularJS建立響應式網站,提供優質的使用者體驗 Jun 27, 2023 pm 07:37 PM

在現今資訊時代,網站已成為人們獲取資訊和交流的重要工具。一個響應式的網站能夠適應各種設備,為使用者提供優質的體驗,成為了現代網站開發的熱點。本篇文章將介紹如何使用PHP和AngularJS建立響應式網站,進而提供優質的使用者體驗。 PHP介紹PHP是一種開源的伺服器端程式語言,非常適合Web開發。 PHP具有許多優點,如易於學習、跨平台、豐富的工具庫、開發效

PHP8.0中新的型別別名語法 PHP8.0中新的型別別名語法 May 14, 2023 pm 02:21 PM

隨著PHP8.0的發布,新增了一種類型別名語法,使得使用自訂的類型變得更加容易。在本文中,我們將深入了解這種新的語法,以及它對開發人員的影響。什麼是類型別名?在PHP中,類型別名本質上是一個變量,它引用另一個類型的名稱。這個變數可以像其他類型一樣使用,並在程式碼中的任何地方聲明。這種語法的主要作用是為常用的類型定義自訂別名,使得程式碼更易於閱讀和理解。

PHP8.0中的父類別呼叫語法 PHP8.0中的父類別呼叫語法 May 14, 2023 pm 01:00 PM

PHP是一種廣泛應用於Web開發的伺服器端腳本語言,而PHP8.0版本中引進了一種新的父類呼叫語法,讓物件導向程式設計更加方便簡潔。在PHP中,我們可以透過繼承的方式來建立一個父類別和一個或多個子類別。子類別可以繼承父類別的屬性和方法,並且可以透過重寫父類別的方法來修改或擴展其功能。在普通的PHP繼承中,如果我們想在子類別中呼叫父類別的方法,需要使用parent關鍵字來引用父

Go語言與JS的連結與區別 Go語言與JS的連結與區別 Mar 29, 2024 am 11:15 AM

Go語言與JS的聯繫與區別Go語言(也稱為Golang)和JavaScript(JS)都是目前流行的程式語言,它們在某些方面有聯繫,在其他方面又有明顯的區別。本篇文章將探討Go語言與JavaScript之間的聯繫與區別,同時提供具體的程式碼範例來幫助讀者更好地理解這兩種程式語言。連結:都是跨平台的Go語言和JavaScript都是跨平台的,可以在不同的作業系統

C和C++之間的差別是什麼? C和C++之間的差別是什麼? Aug 29, 2023 pm 11:53 PM

C程式語言C是一種通用的、高階的語言,最初由DennisM.Ritchie在貝爾實驗室開發用於開發UNIX作業系統。 C最初是在1972年在DECPDP-11計算機上首次實現的。 1978年,BrianKernighan和DennisRitchie製作了第一個公開可用的C描述,現在稱為K&R標準。 UNIX作業系統、C編譯器以及幾乎所有UNIX應用程式都是用C語言寫的。由於各種原因,C語言現在已成為廣泛使用的專業語言。簡單易學結構化語言它產生高效的程式它可以處理低階活動可以在多種計算機

See all articles