Angular4學習筆記(五):http
程式猿十大未解之謎
其實我準備原本按照教程上的寫法,用angular-in-memory-web-api類偽裝一個伺服器。而在最開始的專案裡,我也確實是這麼做的。
但是後來我用webpack替換了原demo中的systemjs,一切都跑偏了。
同樣的程式碼,在之前的專案裡怎麼跑都沒問題;在現在的專案裡,死活都是伺服器地址不對。
這就是程式猿十大未接謎題之首:剛才還特麼是好好的啊!
最後我實在找不到問題出在那裡,只好用js再寫了一個跑在node上的伺服器demo。
有的時候技術突破,也是被逼無奈。不是他XX的,就是你XX的。(原諒我爆粗口)。
所以我們需要小小的轉一個彎,來搞定有關node伺服器上的一些東西。
nodejs伺服器
git上的專案中,server目錄下,就是一個小小的伺服器demo,執行方式為進入資料夾後npm start。
伺服器包含2個檔案:
data.js是我隨便寫的一堆假資料(是的,伺服器也是假資料,因為我還不會用mongodb)
http.js是伺服器主檔案。
angularjs中的http
現在可以回到angular的部分,開始改造service了:
1 定義主路徑
private api = 'http://localhost:4000';
2 定義2個介面
private gundamList = '/gundamlist';
private gundamDeail = '/detail';
3 使用angular中的http模組
http類在angular中的‘@angular/http’裡,任何使用http之前都需要匯入。以及因為http本身是一個基類要在所有元件中使用,所以需要新增到app.module.ts的imports數組裡。
順便,因為在2個component都用到了service,所以不需要特別在每一個component用provider宣告,在app.module.ts宣告一次就可以了(但是還需要匯入和注入)。
做完之前的鋪墊後,終於可以在service裡用http去請求資料了。
匯入http:
import { Http } from '@angular/http';
必須的toPromise
import 'rxjs/add/operator/toPromise';
在建構函式中注入:
constructor(private http: Http) {};
修改獲得資料的方法:
// 獲得全部資料
getGundams(): Promise<Gundam[]> {
return this.http.get(this.api + this.gundamList)
.toPromise()
.then(response => response.json() as Gundam[])
.catch(this.handleError);
}
// 根據Id查詢高達
getGundamById(id: number): Promise<Gundam> {
return this.http.get(this.api + this.gundamDeail + '?id=' + id)
.toPromise().then( jsonStr => jsonStr.json() as Gundam)
.catch(this.handleError);
}
// 捕獲異常並輸出
private handleError(error: any): Promise<any> {
console.error('An error occurred', error); // for demo purposes only
return Promise.reject(error.message || error);
}
1 http.get(url)(或者post put delete),訪問伺服器以後會返回一個observation物件,事實上是observation<伺服器返回值>。通過toPromise轉換成promise物件以後,就可以正常的使用then方法去處理返回值了。
2 通過promise的then方法,可以獲得到伺服器的返回值。2個返回值都是json字串,而在angular還是先按字串處理。呼叫字串的.json()方法轉化為json陣列(介面1)或者json物件(介面2),繼續呼叫關鍵字as將jison陣列或者jison物件轉化Gundam類,轉化的方式是屬性對應。
回到主頁面,重新整理
點選任意一個欄目
現在可以把假資料刪除,然後測試基本流程了。
webpack打包
進入angular目錄,執行打包命令:
npm run build
打包完成
進入angular/dist資料夾內,會有如下幾個檔案:
複製到server目錄下的assets資料夾下(沒有請新建):
回到伺服器目錄下,啟動伺服器:
點選任一列表專案:
可能樣子還不怎麼好看,可能邏輯處理也很簡單。但是至少是一個從前端到後端跑通的流程了。
相關推薦
Angular4學習筆記(五):http
程式猿十大未解之謎 其實我準備原本按照教程上的寫法,用angular-in-memory-web-api類偽裝一個伺服器。而在最開始的專案裡,我也確實是這麼做的。 但是後來我用webpack替換了原demo中的systemjs,一切都跑偏了。 同樣
安卓開發學習筆記(五):史上最簡單且華麗地實現Android Stutio當中Webview控制元件https/http協議的方法
一.我們先在XML當中自定義一個webview(Second_layout.xml) 程式碼如下: 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.an
javascript學習筆記(五):異常捕獲和事件處理
log 類型 按鈕 輸入 button lan yellow logs 代碼 異常捕獲 Try{ 發生異常的代碼塊 }catch(err){ 異常信息處理 } 1 <!DOCTYPE html> 2 <html> 3 <head
Unity3D之Mecanim動畫系統學習筆記(五):Animator Controller
浮點 key 發現 菜單 融合 stat mon 好的 project 簡介 Animator Controller在Unity中是作為一種單獨的配置文件存在的文件類型,其後綴為controller,Animator Controller包含了以下幾種功能: 可以對
hadoop學習筆記(五):HBase體系結構和數據模型
ems 服務器端 們的 code 修改 保存 重新 table lpad 1. HBase體系結構 一個完整分布式的HBase的組成示意圖如下,後面我們再詳細談其工作原理。 1)Client 包含訪問HBase的接口並維護cache來加快對HBase的訪問。 2)Zooke
學習筆記(五):使用決策樹演算法檢測POP3暴力破解
1.資料蒐集 載入KDD 99中的資料: def load_kdd99(filename): x=[] with open(filename) asf: for line in f: line=line.st
機器學習筆記(五):樸素貝葉斯分類器
一、概述 1.1 簡介 樸素貝葉斯(Naive Bayesian)是基於貝葉斯定理和特徵條件獨立假設的分類方法,它通過特徵計算分類的概率,選取概率大的情況進行分類,因此它是基於概率論的一種機器學習分類方法。因為分類的目標是確定的,所以也是屬於監督學習。 Q1:什麼是基於概率論的方
學習筆記(五):Java異常機制
主要從這幾個方面來說說Java中的異常: 圖1.知識體系1. 異常:指的是程式在執行過程中,出現的非正常的情況,最終會導致JVM的非正常停止。 異常的繼承體系如下: 圖1.1 異常的繼承體系 Throwable類是 Java 語言中所有錯誤或異常的父類
Web學習筆記(一):HTTP請求
HTTP請求流程 手頭有本《Web安全深度剖析》,感覺很裝逼,就看了看。 客戶端傳送Request請求,服務端返回Response請求 客戶端一般就是我們用的瀏覽器,服務端一般是高效能的計算機(組),比如www.baidu.com就代表一個伺服器的地址,即域名
Spring學習筆記(五):Spring JDBC 框架及應用示例
JDBC 框架概述 在使用普通的 JDBC 資料庫時,就會很麻煩的寫不必要的程式碼來處理異常,開啟和關閉資料庫連線等。但 Spring JDBC 框架負責所有的低層細節,從開始開啟連線,準備和執行 SQL 語句,處理異常,處理事務,到最後關閉連線。 所以當從資料庫中獲取資
Go語言學習筆記(五):變數作用域
Go語言變數型別 Go語言變數型別分為三種:區域性變數,全域性變數,形式引數 型別 定義 描述 區域性變數 在函式內定義的變數 作用域只在函式體內 全域性變數 在函式外定義的變數 全域性變數可以在整個包甚至外部包(被匯出後)
機器學習筆記(五):支援向量機(SVM)
支援向量機是目前機器學習的眾多演算法中使用得最為廣泛的演算法之一,本文主要介紹支援向量機的概念與原理。 目錄 什麼是支援向量機 硬間隔線性支援向量機 軟間隔線性支援向量機 非線性支援向量機 一、什麼是支援向量機 &nbs
各種音視訊編解碼學習詳解之 編解碼學習筆記(五):Mpeg系列——AAC音訊
最近在研究音視訊編解碼這一塊兒,看到@bitbit大神寫的【各種音視訊編解碼學習詳解】這篇文章,非常感謝,佩服的五體投地。奈何大神這邊文章太長,在這裡我把它分解成很多小的篇幅,方便閱讀。大神部落格傳送門:https://www.cnblogs.com/skyo
java Concurrent包學習筆記(五):Semaphore
一、Semaphore 是什麼 訊號量Semaphore是一個併發工具類,用來控制可同時併發的執行緒數,其內部維護了一組虛擬許可,建構函式初始化的時候可以指定許可的總數量 每次執行緒執行操作時先通過acquire方法獲得許可,執行緒獲得許可後Semaphore 的許可數量會減1,執行完畢再通過
Python3《機器學習實戰》學習筆記(五):樸素貝葉斯實戰篇之新浪新聞分類
一 前言 拉普拉斯平滑 垃圾郵件過濾 新浪新聞分類 二 樸素貝葉斯改進之拉普拉斯平滑 上篇文章提到過,演算法存在一定的問題,需要進行改進。那麼需要改進的地方在哪裡呢?利用貝葉斯分類器對文件進行分類時,要計算多個概率的乘積以獲得
python3.5《機器學習實戰》學習筆記(五):決策樹演算法實戰之預測隱形眼鏡型別
一、使用決策樹預測隱形眼鏡型別 在上一篇文章中,我們學習了決策樹演算法,接下來,讓我們通過一個例子講解決策樹如何預測患者需要佩戴的隱形眼鏡型別。 隱形眼鏡資料集是非常著名的資料集,它包含了很多患者眼部狀況的觀察條件以及醫生推薦的隱形眼鏡型別。隱形眼鏡
SpringBoot學習筆記(五):SpringBoot整合lombok工具、SpringBoot整合Shiro安全框架
SpringBoot整合lombok工具 什麼是lombok? 自動生成setget方法,建構函式,列印日誌 官網:http://projectlombok.org/features/index. 平時我們寫的一些重複程式碼,比如每個實體類的setter,getter方法,給每個類寫
OpenCV學習筆記(五):計算影象直方圖
畫素值在影象中的分佈情況是這幅影象的一個重要特徵。直方圖是一個簡單的表,它給出了衣服影象或一組影象中擁有給定數值的畫素數量。在OpenCV中計算直方圖可以通過使用cv::clacHist()函式。這是一
cortex_m3_stm32嵌入式學習筆記(五):獨立看門狗實驗(IWDG)
微控制器系統在外界的干擾下會出現程式跑飛的現象導致出現死迴圈,看門狗電路就是為了避免這種情況的發生。看門狗的作用就是在一定時間內(通過定時計數器實現)沒有接收喂狗訊號(表示 MCU 已經掛了),便實
pytorch學習筆記(五):儲存和載入模型
# 儲存和載入整個模型 torch.save(model_object, 'model.pkl') model = torch.load('model.pkl') # 僅儲存和載入模型引數(推薦使