请重置工作目录:

现在当你点击列表中的一部手机之后,这部手机的详细信息页面就会被显示出来。

为了实现手机详细信息视图我们将会使用$http来获取数据,同时我们也要增添一个视图模板。

步骤7和步骤8之间最重要的不同在下面列出。你可以在里看到完整的差别。

除了phones.jsonapp/phones/目录也包含了每一部手机信息的json文件。

app/phones/nexus-s.json(样例片段)

  1. {
  2. "additionalFeatures": "Contour Display, Near Field Communications (NFC),...",
  3. "android": {
  4. "os": "Android 2.3",
  5. "ui": "Android"
  6. },
  7. ...
  8. "images": [
  9. "img/phones/nexus-s.0.jpg",
  10. "img/phones/nexus-s.1.jpg",
  11. "img/phones/nexus-s.2.jpg",
  12. "img/phones/nexus-s.3.jpg"
  13. "storage": {
  14. "flash": "16384MB",
  15. "ram": "512MB"
  16. }

我们使用$http服务获取数据,以此来拓展我们的PhoneListCtrl。这和之前的手机列表控制器的工作方式是一样的。

app/js/controllers.js

为了构造HTTP请求的URL,我们需要$route服务提供的当前路由中抽取$routeParams.phoneId

phone-detail.html文件中原有的TBD占位行已经被列表和构成手机详细信息的绑定替换掉了。注意到,这里我们使用AngularJS的{{表达式}}标记和ngRepeat来在视图中渲染数据模型。

app/partials/phone-detail.html

  1. <img ng-src="{{phone.images[0]}}" class="phone">
  2. <h1>{{phone.name}}</h1>
  3. <p>{{phone.description}}</p>
  4. <ul class="phone-thumbs">
  5. <li ng-repeat="img in phone.images">
  6. <img ng-src="{{img}}">
  7. </li>
  8. </ul>
  9. <li>
  10. <span>Availability and Networks</span>
  11. <dl>
  12. <dt>Availability</dt>
  13. <dd ng-repeat="availability in phone.availability">{{availability}}</dd>
  14. </dl>
  15. </li>
  16. ...
  17. </li>
  18. <span>Additional Features</span>
  19. <dd>{{phone.additionalFeatures}}</dd>
  20. </li>
  21. </ul>

我们来写一个新的单元测试,这个测试和我们在步骤5中为PhoneListCtrl写的那个很像。

执行./scripts/test.sh脚本来执行测试,你应该会看到如下输出:

  1. Chrome: Runner reset.
  2. ...
  3. Chrome 19.0.1084.36 Mac OS: Run 3 tests (Passed: 3; Fails: 0; Errors 0) (5.00 ms)

同时,我们也添加一个端到端测试,指向Nexus S手机详细信息页面并且验证页面的头部是“Nexus S”。

test/e2e/scenarios.js

你现在可以刷新你的浏览器,然后重新跑一遍端到端测试,或者你可以在AngularJS的服务器上运行一下。

使用写一个测试,用它来验证我们在Nexus S详细信息页面显示的四个缩略图。

总结

现在手机详细页面已经就绪了,在中我们将学习如何写一个显示过滤器。