请重置工作目录:
现在当你点击列表中的一部手机之后,这部手机的详细信息页面就会被显示出来。
为了实现手机详细信息视图我们将会使用$http来获取数据,同时我们也要增添一个视图模板。
步骤7和步骤8之间最重要的不同在下面列出。你可以在里看到完整的差别。
除了phones.json
,app/phones/
目录也包含了每一部手机信息的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"
}
我们使用$http
服务获取数据,以此来拓展我们的PhoneListCtrl
。这和之前的手机列表控制器的工作方式是一样的。
app/js/controllers.js
为了构造HTTP请求的URL,我们需要$route
服务提供的当前路由中抽取$routeParams.phoneId
。
phone-detail.html文件中原有的TBD占位行已经被列表和构成手机详细信息的绑定替换掉了。注意到,这里我们使用AngularJS的{{表达式}}
标记和ngRepeat
来在视图中渲染数据模型。
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>
<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>
我们来写一个新的单元测试,这个测试和我们在步骤5中为PhoneListCtrl
写的那个很像。
执行./scripts/test.sh
脚本来执行测试,你应该会看到如下输出:
Chrome: Runner reset.
...
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详细信息页面显示的四个缩略图。
总结
现在手机详细页面已经就绪了,在中我们将学习如何写一个显示过滤器。