搜尋
首頁web前端js教程AngularJS入門教學(二):AngularJS模板_AngularJS

是時候給這些網頁點動態特性了-用AngularJS!我們這裡為後面要加入的控制器新增了一個測試。

一個應用的程式碼架構有很多種。對於AngularJS應用,我們鼓勵使用模型-視圖-控制器(MVC)模式解耦程式碼和分離關注點。考慮到這一點,我們用AngularJS來為我們的應用添加一些模型、視圖和控制器。

請重設工作目錄:

複製程式碼 程式碼如下:

git checkout -f step-2

我們的應用程式現在有了一個包含三支手機的清單。

步驟1和步驟2之間最重要的差異在下面列出。你可以到GitHub去看完整的差別。

視圖與範本

在AngularJS中,一個視圖是模型透過HTML**模板**渲染之後的映射。這意味著,無論模型何時發生變化,AngularJS會即時更新結合點,隨之更新視圖。

例如,視圖元件被AngularJS用下面這個模板建構出來:

複製程式碼 程式碼如下:



  ...
 
 

 


       

  •       {{phone.name}}
       

    {{phone.snippet}}


       

  •  



我們剛剛把靜態編碼的手機列表替換掉了,因為這裡我們使用ngRepeat指令和兩個用花括號包裹起來的AngularJS表達式-{{phone.name}}和{{phone.snippet}} ——能達到同樣的效果。

1.在

  • 標籤裡面的ng-repeat="phone in phones"語句是一個AngularJS迭代器。這個迭代器告訴AngularJS用第一個
  • 標籤作為模板為列表中的每一部手機創建一個
  • 元素。

    2.如我們在步驟0時學到的,包裹在phone.name和phone.snippet周圍的花括號標識著資料綁定。和常數計算不同的是,這裡的表達式其實是我們應用的一個資料模型引用,這些我們在PhoneListCtrl控制器裡面都設定好了。

    模型與控制器

    在PhoneListCtrl控制器裡面初始化了資料模型(這裡只不過是一個包含了數組的函數,數組中儲存的物件是手機資料列表):

    app/js/controller.js:

    複製程式碼 程式碼如下:

    function PhoneListCtrl($scope) {
      $scope.phones = [
        {"name": "Nexus S",
         "snippet": "Fast just got faster with Nexus S."},
        {"name": "Motorola XOOM™ with Wi-Fi",
         "snippet": "The Next, Next Generation tablet."},
        {"name": "MOTOROLA XOOM™",
         "snippet": "The Next, Next Generation tablet."}
      ];
    }

    儘管控制器看起來並沒有起到什麼控制的作用,但是它在這裡起到了至關重要的作用。透過給定我們資料模型的語境,控制器允許我們建立模型和視圖之間的資料綁定。我們是這樣把表現層,數據和邏輯部件連結在一起的:

    1.PhoneListCtrl-控制器方法的名字(在JS檔案controllers.js中)和

    標籤裡面的ngController指令的值相符。

    2.手機的資料此時與注入到我們控制器函數的作用域($scope)相關聯。當應用程式啟動之後,會有一個根作用域被建立出來,而控制器的作用域是根作用域的一個典型後繼。這個控制器的作用域對所有

    標記內部的資料綁定有效。

    AngularJS的作用域理論非常重要:一個作用域可以視為模板、模型和控制器協同工作的黏接器。 AngularJS使用作用域,同時也有模板中的信息,資料模型和控制器。這些可以幫助模型和視圖分離,但是他們兩者確實是同步的!任何對於模型的變更都會即時反映在視圖上;任何在視圖上的變更都會立刻體現在模型中。

    想要更深入理解AngularJS的作用域,請參考AngularJS作用域文件

    檢定

    「AngularJS方式」讓開發時程式碼測試變得十分簡單。讓我們來瞅一眼下面這個為控制器新添加的單元測試:

    test/unit/controllersSpec.js:

    複製程式碼 程式碼如下:

    describe('PhoneCat controllers', function() {

      describe('PhoneListCtrl', function(){

        it('should create "phones" model with 3 phones', function() {
          var scope = {},
          ctrl = new PhoneListCtrl(scope);

          expect(scope.phones.length).toBe(3);
        });
      });
    });

    這個測試驗證了我們的手機陣列裡面有三筆記錄(暫時不用弄清楚這個測試腳本)。這個範例顯示出為AngularJS的程式碼建立一個單元測試是多麼的容易。正因為測試在軟體開發中是必不可少的環節,所以我們使得在AngularJS可以輕易地建立測試,來鼓勵開發者多寫它們。

    在寫入測驗的時候,AngularJS的開發者傾向於使用Jasmine行為驅動開發(BBD)框架中的語法。儘管An​​gularJS沒有強迫你使用Jasmine,但是我們在教程裡面所有的測試都使用Jasmine編寫。你可以在Jasmine的官方首頁Jasmine Wiki上獲得相關知識。

    基於AngularJS的項目被預先配置為使用JsTestDriver來運行單元測試。

    你可以像下面這樣執行測試:

    1.在一個單獨的終端機上,進入到angular-phonecat目錄並且運行./scripts/test-server.sh來啟動測試(Windows命令行下請輸入.scriptstest-server.bat來運行腳本,後面腳本指令運作方式類似);
    2.開啟一個新的瀏覽器窗口,並且前往http://localhost:9876 ;
    3.選擇“Capture this browser in strict mode”。

    這個時候,你可以拋開你的窗口不管然後把這事忘了。 JsTestDriver會自己把測試跑完並且把結果輸出在你的終端機裡。

    4.執行./scripts/test.sh進行測試 。

    你應當看到類似如下的結果:

    複製程式碼 程式碼如下:

    Chrome: Runner reset.
    .
    Total 1 tests (Passed: 1; Fails: 0; Errors: 0) (2.00 ms)
      Chrome 19.0.1084.36 Mac OS: Run 1 tests (Passed: 1; Fails: 0; Errors 0) (2.00 ms)

    耶!測試通過了!或沒有... 注意:如果在你執行測試之後發生了錯誤,關閉瀏覽器然後回到終端關閉了腳本,然後在重新來一邊上面的步驟。

    練習

    為index.html新增另一個資料綁定。例如:

    複製程式碼 程式碼如下:

    Total number of phones: {{phones.length}}



    建立一個新的資料模型屬性,並且把它綁定到模板上。例如:
    複製程式碼 程式碼如下:

    $scope.hello = "Hello, World!"

    更新你的瀏覽器,確保顯示出來「Hello, World!」

    用一個迭代器建立一個簡單的表:

    複製程式碼 程式碼如下:


       
       
    row number
    {{i}}


    現在讓資料模型表達式的i增加1:
    複製程式碼 程式碼如下:


       
       
    row number
    {{i 1}}


    確定把toBe(3)改成toBe(4)之後單元測試失敗,然後重新跑一遍./scripts/test.sh腳本

    總結

    你現在擁有一個模型,視圖,控制器分離的動態應用了,並且你隨時進行了測試。現在,你可以進入到步驟3來為應用程式加入全文檢索功能了。

  • 陳述
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
    PHP实现框架:CakePHP入门教程PHP实现框架:CakePHP入门教程Jun 18, 2023 am 09:04 AM

    随着互联网技术的不断发展,Web开发技术也在不断更新迭代。PHP作为一种开源的编程语言,在Web开发中拥有广泛的应用。而PHP框架作为PHP开发中常用的工具之一,能够提高开发效率和代码质量。本文将为大家介绍一个PHP框架——CakePHP,并提供一些简单入门的教程。一、什么是CakePHP?CakePHP是一个基于MVC(Model-View-Control

    初学者指南:从零开始,逐步学习MyBatis初学者指南:从零开始,逐步学习MyBatisFeb 19, 2024 am 11:05 AM

    简明易懂的MyBatis入门教程:一步一步编写你的第一个程序MyBatis是一种流行的Java持久层框架,它简化了与数据库交互的过程。本教程将为您介绍如何使用MyBatis创建和执行简单的数据库操作。第一步:环境搭建首先,确保您的Java开发环境已经安装好。然后,下载MyBatis的最新版本,并将其添加到您的Java项目中。您可以从MyBatis的官方网站下

    PHP实现框架:Lumen框架入门教程PHP实现框架:Lumen框架入门教程Jun 18, 2023 am 08:39 AM

    Lumen是Laravel框架开发者开发的一款基于PHP的微框架,它的设计初衷是为了快速构建小型的API应用和微服务,同时保留了Laravel框架的部分组件和特性。Lumen框架轻量级、快速、易上手,因此受到了广泛的关注和使用。在本篇文章中,我们将快速入门Lumen框架,学习如何使用Lumen框架构建简单的API应用。框架准备在学习Lumen框架之前,我们需

    2022年最新5款的angularjs教程从入门到精通2022年最新5款的angularjs教程从入门到精通Jun 15, 2017 pm 05:50 PM

    Javascript 是一个非常有个性的语言. 无论是从代码的组织, 还是代码的编程范式, 还是面向对象理论都独具一格. 而很早就在争论的Javascript 是不是面向对象语言这个问题, 显然已有答案. 但是, 即使 Javascript 叱咤风云二十年, 如果想要看懂 jQuery, Angularjs, 甚至是 React 等流行框架, 观看《黑马云课堂JavaScript 高级框架设计视频教程》就对了。

    使用PHP和AngularJS搭建一个响应式网站,提供优质的用户体验使用PHP和AngularJS搭建一个响应式网站,提供优质的用户体验Jun 27, 2023 pm 07:37 PM

    在如今信息时代,网站已经成为人们获取信息和交流的重要工具。一个响应式的网站能够适应各种设备,为用户提供优质的体验,成为了现代网站开发的热点。本篇文章将介绍如何使用PHP和AngularJS搭建一个响应式网站,从而提供优质的用户体验。PHP介绍PHP是一种开源的服务器端编程语言,非常适用于Web开发。PHP具有很多优点,如易于学习、跨平台、丰富的工具库、开发效

    使用PHP和AngularJS构建Web应用使用PHP和AngularJS构建Web应用May 27, 2023 pm 08:10 PM

    随着互联网的不断发展,Web应用已成为企业信息化建设的重要组成部分,也是现代化工作的必要手段。为了使Web应用能够便于开发、维护和扩展,开发人员需要选择适合自己开发需求的技术框架和编程语言。PHP和AngularJS是两种非常流行的Web开发技术,它们分别是服务器端和客户端的解决方案,通过结合使用可以大大提高Web应用的开发效率和使用体验。PHP的优势PHP

    Python Flask框架入门教程Python Flask框架入门教程Jun 17, 2023 am 08:48 AM

    PythonFlask框架入门教程Flask是一个简单易用的PythonWeb框架,它更注重灵活性和轻量性,允许程序员按照自己的喜好进行构建。本文将为大家介绍Flask的基本概念、安装和使用,并通过一个简单的示例来演示如何使用Flask构建一个Web应用程序。什么是Flask?Flask是一个基于Python的轻量级Web应用框架,它不需要使用任何特殊的

    Java邮件发送指南:简易入门与实际示范Java邮件发送指南:简易入门与实际示范Dec 27, 2023 am 09:17 AM

    Java邮件发送教程:快速入门与实例演示近年来,随着互联网的普及和发展,电子邮件已经成为人们日常生活和工作中不可或缺的一部分。而通过Java编程语言发送电子邮件,不仅可以实现快速高效的邮件发送,还可以通过自动化方式大大提高工作效率。本文将介绍如何在Java中使用JavaMail库进行邮件发送,并通过具体代码示例演示。第一步:JavaMail库的导入和配置首先

    See all articles

    熱AI工具

    Undresser.AI Undress

    Undresser.AI Undress

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

    AI Clothes Remover

    AI Clothes Remover

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

    Undress AI Tool

    Undress AI Tool

    免費脫衣圖片

    Clothoff.io

    Clothoff.io

    AI脫衣器

    AI Hentai Generator

    AI Hentai Generator

    免費產生 AI 無盡。

    熱門文章

    R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
    2 週前By尊渡假赌尊渡假赌尊渡假赌
    倉庫:如何復興隊友
    1 個月前By尊渡假赌尊渡假赌尊渡假赌
    Hello Kitty Island冒險:如何獲得巨型種子
    4 週前By尊渡假赌尊渡假赌尊渡假赌

    熱工具

    Dreamweaver Mac版

    Dreamweaver Mac版

    視覺化網頁開發工具

    SublimeText3 Linux新版

    SublimeText3 Linux新版

    SublimeText3 Linux最新版

    SublimeText3漢化版

    SublimeText3漢化版

    中文版,非常好用

    SublimeText3 英文版

    SublimeText3 英文版

    推薦:為Win版本,支援程式碼提示!

    ZendStudio 13.5.1 Mac

    ZendStudio 13.5.1 Mac

    強大的PHP整合開發環境