這一步,你會為手機列表的手機添加縮略圖以及一些鏈接,不過這些鏈接還不會起作用。接下來你會使用這些鏈接來分類顯示手機的額外信息。
請重置工作目錄:
~~~
git checkout -f step-6
~~~
現在你應該能夠看到列表里面手機的圖片和鏈接了。
步驟5和步驟6之間最重要的不同在下面列出。你可以在[GitHub](https://github.com/angular/angular-phonecat/compare/step-5...step-6)里看到完整的差別。
## 數據
注意到現在`phones.json`文件包含了唯一標識符和每一部手機的圖像鏈接。這些url現在指向`app/img/phones/`目錄。
app/phones/phones.json(樣例片段)
~~~
[
{
...
"id": "motorola-defy-with-motoblur",
"imageUrl": "img/phones/motorola-defy-with-motoblur.0.jpg",
"name": "Motorola DEFY\u2122 with MOTOBLUR\u2122",
...
},
...
]
~~~
## 模板
app/index.html
~~~
...
<ul class="phones">
<li ng-repeat="phone in phones | filter:query | orderBy:orderProp" class="thumbnail">
<a href="#/phones/{{phone.id}}" class="thumb"><img ng-src="{{phone.imageUrl}}"></a>
<a href="#/phones/{{phone.id}}">{{phone.name}}</a>
<p>{{phone.snippet}}</p>
</li>
</ul>
...
~~~
這些鏈接將來會指向每一部電話的詳細信息頁。不過現在為了產生這些鏈接,我們在`href`屬性里面使用我們早已熟悉的雙括號數據綁定。在步驟2,我們添加了`{{phone.name}}`綁定作為元素內容。在這一步,我們在元素屬性中使用`{{phone.id}}`綁定。
我們同樣為每條記錄添加手機圖片,只需要使用[ngSrc](http://code.angularjs.org/1.1.0/docs/api/ng.directive:ngSrc)指令代替`<img>`的`src`屬性標簽就可以了。如果我們僅僅用一個正常`src`屬性來進行綁定(`<img class="diagram" src="{{phone.imageUrl}}">`),瀏覽器會把AngularJS的`{{ 表達式 }}`標記直接進行字面解釋,并且發起一個向非法url`http://localhost:8000/app/{{phone.imageUrl}}`的請求。因為瀏覽器載入頁面時,同時也會請求載入圖片,AngularJS在頁面載入完畢時才開始編譯——瀏覽器請求載入圖片時`{{phone.imageUrl}}`還沒得到編譯!有了這個`ngSrc`指令會避免產生這種情況,使用`ngSrc`指令防止瀏覽器產生一個指向非法地址的請求。
## 測試
test/e2e/scenarios.js
~~~
...
it('should render phone specific links', function() {
input('query').enter('nexus');
element('.phones li a').click();
expect(browser().location().url()).toBe('/phones/nexus-s');
});
...
~~~
我們添加了一個新的端到端測試來驗證應用為手機視圖產生了正確的鏈接,上面就是我們的實現。
你現在可以刷新你的瀏覽器,并且用端到端測試器來觀察測試的運行,或者你可以在[AngularJS服務器](http://angular.github.com/angular-phonecat/step-6/test/e2e/runner.html)上運行它們。
## 練習
將`ng-src`指令換成普通的`src`屬性。用像Firebug,Chrome Web Inspector這樣的工具,或者直接去看服務器的訪問日志,你會發現你的應用向`/app/%7B%7Bphone.imageUrl%7D%7D`(或者`/app/{{phone.imageUrl}}`)發送了一個非法請求。
這個問題是由于瀏覽器會在遇到`img`標簽的時候立刻向還未得到編譯的URL地址發送一個請求,AngularJS只有在頁面載入完畢后才開始編譯表達式從而得到正確的圖片URL地址。
## 總結
如今你已經添加了手機圖片和鏈接,轉到[步驟7](a00a),我們將學習AngularJS的布局模板以及AngularJS是如何輕易地為應用提供多重視圖。