ng中用$http接後台介面的非同步坑

來源:互聯網
上載者:User

標籤:

  最近筆者在一個項目中用ng去接背景介面。因為前後端都是新手,前端的不懂後台,且沒有經驗;後端的不懂前端,也沒有經驗,然後介面bug百出,文檔寫得亂。一個介面,後台改了三次,我也是寸步難行。

  首先來看看介面文檔,開始這次的非同步坑話題:

 ① ②

  可以看到圖③是頁面中要提供後端資料的四個下拉框,圖②是提供給圖③中學校下拉框的資料(當然介面文檔資料只是提供參考的,真正資料在sql中,所以顯示在視圖中的資料和介面文檔中的資料不大一樣),圖①是提供使用者的預設資料的介面。

  看完這些,在這方面稍有經驗的前端都會知道介面文檔中的school/campus/grade/department這四個資料應該是以json格式提供,即{id:"name"}的格式,這樣才是正確的,為什麼呢?我是掉進了這個大坑之後才醒目過來的:

  ng中使下拉框提供預設資料是要ng-model中的值等於x.id,(至於基礎性的問題比如ng-options為什麼這樣寫,不懂的朋友就去翻翻《angularjs權威指南》啦,一本好書來的):

  

  按照後端給的介面,沒有經驗的我傻乎乎地做了一次轉換:

  controller.js:

  

  service.js:

  

  原本筆者以為只要用一個函數,將圖①的中文(等價於圖②中的name)轉換為圖②中的id即可。是的,這樣是可以,但是會出現每次重新整理的時候在圖③的下拉框位置顯示的預設值時有時無,為什麼呢? 那是因為我忽略了ng中$http請求時非同步,我們來看官網API:

  

  當我的頁面中有多個$http請求的時候,每次重新整理,因為請求時非同步,所以沒法控制哪個請求先,哪個請求後,這樣的話,就造成了service.js圖中分別提供nameList和changeObj資料的介面有可能有一個已經得到相應資料了,並且執行changeAsId函數了,但是另一個介面的資料還沒響應回來,所以會出現無法提供ng-model的值的情況;

  當然啦,如果項目中用到了ng,是新手的前端和後端在做互動的時候都應該注意到這個問題,因為筆者飽受此痛苦。

  這幾天遇到太多bug,因為是都是新手,知識面都還不全。 不過,希望這次的分享能夠協助到你們,祝學習愉快!

 

 

 

 


ng中用$http接後台介面的非同步坑

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.