AngularJS入門教程之更多模板詳解
在這一步,你將實(shí)現(xiàn)手機(jī)詳細(xì)信息視圖,這個(gè)視圖會(huì)在用戶點(diǎn)擊手機(jī)列表中的一部手機(jī)時(shí)被顯示出來。
請(qǐng)重置工作目錄:
git checkout -f step-8
現(xiàn)在當(dāng)你點(diǎn)擊列表中的一部手機(jī)之后,這部手機(jī)的詳細(xì)信息頁面就會(huì)被顯示出來。
為了實(shí)現(xiàn)手機(jī)詳細(xì)信息視圖我們將會(huì)使用$http來獲取數(shù)據(jù),同時(shí)我們也要增添一個(gè)phone-detail.html視圖模板。
步驟7和步驟8之間最重要的不同在下面列出。你可以在GitHub里看到完整的差別。
數(shù)據(jù)
除了phones.json,app/phones/目錄也包含了每一部手機(jī)信息的json文件。
app/phones/nexus-s.json(樣例片段)
{ "additionalFeatures": "Contour Display, Near Field Communications (NFC),...", "android": { "os": "Android 2.3", "ui": "Android" }, ... "images": [ "img/phones/nexus-s.0.jpg", "img/phones/nexus-s.1.jpg", "img/phones/nexus-s.2.jpg", "img/phones/nexus-s.3.jpg" ], "storage": { "flash": "16384MB", "ram": "512MB" } }
這些文件中的每一個(gè)都用相同的數(shù)據(jù)結(jié)構(gòu)描述了一部手機(jī)的不同屬性。我們會(huì)在手機(jī)詳細(xì)信息視圖中顯示這些數(shù)據(jù)。
控制器
我們使用$http服務(wù)獲取數(shù)據(jù),以此來拓展我們的PhoneListCtrl。這和之前的手機(jī)列表控制器的工作方式是一樣的。
app/js/controllers.js
function PhoneDetailCtrl($scope, $routeParams, $http) { $http.get('phones/' + $routeParams.phoneId + '.json').success(function(data) { $scope.phone = data; }); } //PhoneDetailCtrl.$inject = ['$scope', '$routeParams', '$http'];
為了構(gòu)造HTTP請(qǐng)求的URL,我們需要$route服務(wù)提供的當(dāng)前路由中抽取$routeParams.phoneId。
模板
phone-detail.html文件中原有的TBD占位行已經(jīng)被列表和構(gòu)成手機(jī)詳細(xì)信息的綁定替換掉了。注意到,這里我們使用AngularJS的{{表達(dá)式}}標(biāo)記和ngRepeat來在視圖中渲染數(shù)據(jù)模型。
app/partials/phone-detail.html
<img ng-src="{{phone.images[0]}}" class="phone"> <h1>{{phone.name}}</h1> <p>{{phone.description}}</p> <ul class="phone-thumbs"> <li ng-repeat="img in phone.images"> <img ng-src="{{img}}"> </li> </ul> <ul class="specs"> <li> <span>Availability and Networks</span> <dl> <dt>Availability</dt> <dd ng-repeat="availability in phone.availability">{{availability}}</dd> </dl> </li> ... </li> <span>Additional Features</span> <dd>{{phone.additionalFeatures}}</dd> </li> </ul>
測(cè)試
我們來寫一個(gè)新的單元測(cè)試,這個(gè)測(cè)試和我們?cè)诓襟E5中為PhoneListCtrl寫的那個(gè)很像。
test/unit/controllersSpec.js
... describe('PhoneDetailCtrl', function(){ var scope, $httpBackend, ctrl; beforeEach(inject(function(_$httpBackend_, $rootScope, $routeParams, $controller) { $httpBackend = _$httpBackend_; $httpBackend.expectGET('phones/xyz.json').respond({name:'phone xyz'}); $routeParams.phoneId = 'xyz'; scope = $rootScope.$new(); ctrl = $controller(PhoneDetailCtrl, {$scope: scope}); })); it('should fetch phone detail', function() { expect(scope.phone).toBeUndefined(); $httpBackend.flush(); expect(scope.phone).toEqual({name:'phone xyz'}); }); }); ...
執(zhí)行./scripts/test.sh腳本來執(zhí)行測(cè)試,你應(yīng)該會(huì)看到如下輸出:
Chrome: Runner reset. ... Total 3 tests (Passed: 3; Fails: 0; Errors: 0) (5.00 ms) Chrome 19.0.1084.36 Mac OS: Run 3 tests (Passed: 3; Fails: 0; Errors 0) (5.00 ms)
同時(shí),我們也添加一個(gè)端到端測(cè)試,指向Nexus S手機(jī)詳細(xì)信息頁面并且驗(yàn)證頁面的頭部是“Nexus S”。
test/e2e/scenarios.js
... describe('Phone detail view', function() { beforeEach(function() { browser().navigateTo('../../app/index.html#/phones/nexus-s'); }); it('should display nexus-s page', function() { expect(binding('phone.name')).toBe('Nexus S'); }); }); ...
你現(xiàn)在可以刷新你的瀏覽器,然后重新跑一遍端到端測(cè)試,或者你可以在AngularJS的服務(wù)器上運(yùn)行一下。
練習(xí)
使用AngularJS端到端測(cè)試API寫一個(gè)測(cè)試,用它來驗(yàn)證我們?cè)贜exus S詳細(xì)信息頁面顯示的四個(gè)縮略圖。
總結(jié)
現(xiàn)在手機(jī)詳細(xì)頁面已經(jīng)就緒了,在步驟9中我們將學(xué)習(xí)如何寫一個(gè)顯示過濾器。
以上就是整理AngularJS更多模版的資料,后續(xù)繼續(xù)補(bǔ)充相關(guān)資料,謝謝大家對(duì)本站的支持!
- AngularJs Understanding Angular Templates
- AngularJS ng-bind-template 指令詳解
- AngularJS延遲加載html template
- AngularJS實(shí)現(xiàn)根據(jù)變量改變動(dòng)態(tài)加載模板的方法
- AngularJS模板加載用法詳解
- AngularJS入門教程之鏈接與圖片模板詳解
- AngularJS入門教程之AngularJS 模板
- AngularJS入門教程之靜態(tài)模板詳解
- AngularJS 路由和模板實(shí)例及路由地址簡(jiǎn)化方法(必看)
- AngularJS初始化靜態(tài)模板詳解
- AngularJS入門教程(二):AngularJS模板
- AngularJS入門教程(一):靜態(tài)模板
- AngularJS ng-template寄宿方式用法分析
相關(guān)文章
angular ng-repeat數(shù)組中的數(shù)組實(shí)例
下面小編就為大家?guī)硪黄猘ngular ng-repeat數(shù)組中的數(shù)組實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-02-02掌握Queries設(shè)計(jì)模式優(yōu)化Angular應(yīng)用開發(fā)技巧
這篇文章主要介紹了掌握Queries設(shè)計(jì)模式優(yōu)化Angular應(yīng)用開發(fā)的技巧示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10Angularjs 實(shí)現(xiàn)動(dòng)態(tài)添加控件功能
這篇文章主要介紹了Angularjs 實(shí)現(xiàn)動(dòng)態(tài)添加控件功能,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-05-05Angular4學(xué)習(xí)教程之HTML屬性綁定的方法
這篇文章主要給大家介紹了關(guān)于Angular4學(xué)習(xí)教程之HTML屬性綁定的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2018-01-01angularjs實(shí)現(xiàn)搜索的關(guān)鍵字在正文中高亮出來
這篇文章主要介紹了angularjs實(shí)現(xiàn)搜索的關(guān)鍵字在正文中高亮出來,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06Angular2.0實(shí)現(xiàn)modal對(duì)話框的方法示例
這篇文章主要介紹了Angular2.0實(shí)現(xiàn)modal對(duì)話框的方法,結(jié)合實(shí)例形式分析了angular2.0實(shí)現(xiàn)modal對(duì)話框的樣式、界面及功能等相關(guān)操作技巧,需要的朋友可以參考下2018-02-02ionic3+Angular4實(shí)現(xiàn)接口請(qǐng)求及本地json文件讀取示例
本篇文章主要介紹了ionic3+Angular4實(shí)現(xiàn)接口請(qǐng)求及本地json文件讀取示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10