是時候給這些網頁點動態特性了-用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.在
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)框架中的語法。儘管AngularJS沒有強迫你使用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來為應用程式加入全文檢索功能了。

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

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

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

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

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

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

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

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


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Dreamweaver Mac版
視覺化網頁開發工具

SublimeText3 Linux新版
SublimeText3 Linux最新版

SublimeText3漢化版
中文版,非常好用

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

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境