【一起學(xué)AngularJS】第十章、動(dòng)態(tài)獲取和展示詳情頁(yè)

本章我們將把手機(jī)的詳情頁(yè)做詳細(xì)一點(diǎn)鲫竞。改動(dòng)很簡(jiǎn)單:

  • 當(dāng)點(diǎn)擊列表頁(yè)中的某個(gè)手機(jī)時(shí)辐怕,手機(jī)詳情頁(yè)將被展示。

另外比較有趣的是从绘,這次詳情頁(yè)的數(shù)據(jù)獲取我們將借助$http服務(wù)來(lái)完成寄疏。
使用git遷出step-8分支就是該章對(duì)應(yīng)的實(shí)例代碼:

git checkout -f step-8

刷新你的瀏覽器來(lái)看效果是牢,或者可以點(diǎn)這里在線查看

數(shù)據(jù)

除了phones.json之外陕截,app/phones/目錄下還為每個(gè)手機(jī)創(chuàng)建了詳情數(shù)據(jù)驳棱,分別對(duì)應(yīng)一個(gè)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è)文件的結(jié)構(gòu)是一樣的,只是具體參數(shù)的值不一樣艘策。詳情頁(yè)視圖將會(huì)展示這些數(shù)據(jù)。

控制器

我們將對(duì)PhoneDetailCtrl控制器做一點(diǎn)擴(kuò)展:使用$http服務(wù)來(lái)獲取JSON格式文件渊季。
這和列表頁(yè)獲取手機(jī)列表控制器是類似的朋蔫。
app/js/controllers.js

var phonecatControllers = angular.module('phonecatControllers',[]);

phonecatControllers.controller('PhoneDetailCtrl', ['$scope', '$routeParams', '$http',
  function($scope, $routeParams, $http) {
    $http.get('phones/' + $routeParams.phoneId + '.json').success(function(data) {
      $scope.phone = data;
    });
  }]);

我們使用由$route服務(wù)從當(dāng)前路由地址中抽取的¥routeParams.phoneId變量來(lái)構(gòu)建不同手機(jī)的不通HTTP請(qǐng)求的URL地址。

模版

我們把之前的TBD占位行替換成了手機(jī)詳情內(nèi)容却汉。注意我們是在哪里使用{{expression}}標(biāo)記和ngRepeat指令來(lái)完成模型到視圖的數(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è)和第七章中為PhoneListCtrl控制器寫的差不多的單元測(cè)試:
test/unit/controllersSpec.js

 beforeEach(module('phonecatApp'));

  ...

  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'});
    });
  });
...

你將看到Karma的輸出:

Chrome 22.0: Executed 3 of 3 SUCCESS (0.039 secs / 0.012 secs)

我們還寫了一個(gè)端到端測(cè)試來(lái)測(cè)試詳情頁(yè)的Heading是不是“Nexus S”。
test/e2e/scenarios.js

...
  describe('Phone detail view', function() {

    beforeEach(function() {
      browser.get('app/index.html#/phones/nexus-s');
    });


    it('should display nexus-s page', function() {
      expect(element(by.binding('phone.name')).getText()).toBe('Nexus S');
    });
  });
...

然后可以重新運(yùn)行npm run protractor來(lái)查看測(cè)試運(yùn)行

實(shí)驗(yàn)小能手

使用Protractor API合砂,寫一個(gè)測(cè)試用例青扔,用來(lái)驗(yàn)證Nexus詳情頁(yè)4張照片是否顯示正確。(注解:覺(jué)得復(fù)雜就別做了翩伪。沒(méi)啥微猖。)

總結(jié)

下一章我們將學(xué)習(xí)如何編寫自己的過(guò)濾器。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末缘屹,一起剝皮案震驚了整個(gè)濱河市凛剥,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌轻姿,老刑警劉巖犁珠,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異互亮,居然都是意外死亡犁享,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門豹休,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)炊昆,“玉大人,你說(shuō)我怎么就攤上這事威根∫っ校” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵医窿,是天一觀的道長(zhǎng)磅甩。 經(jīng)常有香客問(wèn)我,道長(zhǎng)姥卢,這世上最難降的妖魔是什么卷要? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任渣聚,我火速辦了婚禮,結(jié)果婚禮上僧叉,老公的妹妹穿的比我還像新娘奕枝。我一直安慰自己,他們只是感情好瓶堕,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布隘道。 她就那樣靜靜地躺著,像睡著了一般郎笆。 火紅的嫁衣襯著肌膚如雪谭梗。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,262評(píng)論 1 308
  • 那天宛蚓,我揣著相機(jī)與錄音激捏,去河邊找鬼。 笑死凄吏,一個(gè)胖子當(dāng)著我的面吹牛远舅,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播痕钢,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼图柏,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了任连?” 一聲冷哼從身側(cè)響起爆办,我...
    開(kāi)封第一講書(shū)人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎课梳,沒(méi)想到半個(gè)月后距辆,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡暮刃,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年跨算,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片椭懊。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡诸蚕,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出氧猬,到底是詐尸還是另有隱情背犯,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布盅抚,位于F島的核電站漠魏,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏妄均。R本人自食惡果不足惜柱锹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一哪自、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧禁熏,春花似錦壤巷、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至宙彪,卻和暖如春矩动,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背您访。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工铅忿, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留剪决,地道東北人灵汪。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像柑潦,于是被迫代替她去往敵國(guó)和親享言。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 本章我們將一起學(xué)習(xí): 如何創(chuàng)建一個(gè)布局模版 如何如何創(chuàng)建一個(gè)多視圖路由應(yīng)用 如何使用ngRoute指令實(shí)現(xiàn)視圖路由...
    40ab6525bf35閱讀 849評(píng)論 1 3
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)譬胎,斷路器差牛,智...
    卡卡羅2017閱讀 134,699評(píng)論 18 139
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,283評(píng)論 25 707
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件堰乔、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,120評(píng)論 4 61
  • 站在郵輪上的團(tuán)體行為藝術(shù)镐侯,被盲目的推崇侦讨,細(xì)思有些悲哀。反倒是那些堅(jiān)守崗位的人苟翻,我要施以敬意韵卤。——深水之下 ...
    深水之下閱讀 517評(píng)論 2 8