# 書海拾貝之特殊的ng-src和ng-href
在說明這兩個指令的特殊之前,需要先了解一下ng的啟動及執行過程,如下:
1)?瀏覽器加載靜態HTML文件并解析為DOM;
2)?瀏覽器加載angular.js文件;
3)?angular監聽?DOMContentLoaded?事件,監聽到時開始啟動;
4)?angular尋找ng-app指令,確定作用范圍;
5)?找到app中定義的Module使用$injector服務進行依賴注入;
6)?根據$injector服務創建$compile服務用于編譯;
7)?$compile服務編譯DOM中的指令、過濾器等;
8)?使用ng-init指令,將作用域中的變量進行替換;
9)?最后生成了我們的最終視圖。
可以看到,ng框架是在DOMcontent加載完畢后才開始發揮作用。假如我們模板中有一張圖片如下:
那么在頁面開始加載到ng編譯完成之前,頁面上會一直顯示一張錯誤的圖片,因為路徑{{imgUrl}}還未被替換,就像這樣:
為了避免這種情況,我們使用ng-src指令,這樣在路徑被正確得到之前就不會顯示找不到圖片。同理,標簽的href屬性也需要換成ng-href,這樣頁面上就不會先出現一個地址錯誤的鏈接。
順著這個思路再多想一點,我們在模板中使用{{}}顯示數據時,在ng編譯完成之前頁面上豈不是會顯示出大括號及里面的表達式?確實是這樣。為了避免這個,ng中有一個與{{}}等同的指令:ng-bind,同樣用于單向綁定,在頁面剛加載的時候就不會顯示出對用戶無用的數據了。盡管這樣你可能不但沒舒心反而更糾結了,{{}}那么好用易理解,還不能用了不成?好消息是我們依然可以使用。因為我編寫的是單頁面應用,頁面只會在加載index.html的時候出這個問題,只需在index.html中的模板中換成ng-bind就行。其他的模板是我們動態加載的,就可以放心使用{{}}了。
- 前言
- (一)深入理解ANGULARUI路由_UI-ROUTER
- (二)AngularJS路由問題解決
- (四)ANGULAR.JS實現下拉菜單單選
- (五)Angular實現下拉菜單多選
- (六)AngularJS+BootStrap實現彈出對話框
- (七)實現根據不同條件顯示不同控件
- (十)AngularJS改變元素顯示狀態
- (十四)AngularJS靈異代碼事件
- (十七)在AngularJS應用中實現微信認證授權遇到的坑
- (十八)在AngularJS應用中集成科大訊飛語音輸入功能
- (十九)在AngularJS應用中集成百度地圖實現定位功能
- (二十一)Angularjs中scope與rootscope區別及聯系
- (二十三)ANGULAR三宗罪之版本陷阱
- (二十四)AngularJS與單選框及多選框的雙向動態綁定
- (二十五)JS實現導入文件功能
- (二十七)實現二維碼信息的集成思路
- (二十八)解決AngualrJS頁面刷新導致異常顯示問題
- (二十九)AngularJS項目開發技巧之localStorage存儲
- (三十)AngularJS項目開發技巧之圖片預加載
- (三十一)AngularJS項目開發技巧之獲取模態對話框中的組件ID
- (三十二)書海拾貝之特殊的ng-src和ng-href
- (三十三)書海拾貝之簡介AngularJS中使用factory和service的方法
- (三十四)Angular數據更新不及時問題探討
- (三十六)AngularJS項目開發技巧之利用Service&Promise&Resolve解決圖片預加載問題(后記)