使用Vue構建Ionic混合APP系列教程(三):服務和Http請求
當學習一個新框架的時候,特別是你之前已經使用一個框架很久了,很自然的你會試圖用之前使用的框架來理解一些別的框架的原理。
正如我上一篇文章提到的,Angular是一個結構嚴密的框架,提供了一切開箱即用的東西,不管如何都會有一個正確的方法去解決問題。Vue的結構並不是很嚴密,也不是什麼東西都提供好了,給了你更靈活的選擇去按照你希望的方式組織專案的結構。Angular是設計用來處理你的應用所有方面的事情,Vue基本上只關心如何展示你的應用。
在這篇教程,我們會看看如何在Vue裡建立Services或Providers,通過Http請求獲取一些資料。不過 這是一個將Angular的概念投射到Vue上面的例子, 稍後我們將在這裡詳細地討論。在這篇教程裡我們會通過Reddit API
開始
在前面的教程中我已經介紹了使用Vue建立一個Ionic應用的基礎知識, 所以我們將很快地通過這裡的安裝步驟。如果您不熟悉這些步驟, 我建議您在繼續之前先閱讀前面的兩個教程。
建立一個Vue應用:
vue init webpack service-http-example
執行下面的命令列:
cd service-http-example
npm install
npm run dev
通過修改 index.html 嚮應用程式新增Ionic:
<!DOCTYPE html>
<html>
<head >
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
<meta name="format-detection" content="telephone=no" >
<meta name="msapplication-tap-highlight" content="no">
<title>service-example</title>
</head>
<body>
<div id="app"></div>
<!-- built files will be auto injected -->
<script src="https://unpkg.com/@ionic/[email protected]/dist/ionic.js"></script>
</body>
</html>
Angula服務 vs Vue
在Ionic/Angular裡從一些伺服器獲取資料,我們通常會建立一個服務(service/provider)來為我們做這些工作,我們會用內建的Http API 來獲取資料。然後我們會在需要使用這些資料的元件裡注入這個服務,再使用我們在服務裡建立的方法。
這裡沒有什麼其他需要考慮的東西,不過如果在Ionic/Vue要做同樣的事情,就沒有這麼肯定了。
因為我們是從Angular轉過來的,所以可能我們想在Vue裡建立一個”provider”,然後用Vue版本的“Http”來獲取資料。但是在Vue裡沒有“provider”或“service”或“injectable”這些概念,而且也沒有預設的Http請求庫。這些不是Vue框架自己關心的事情。
所以怎麼辦?你可以想怎麼做就怎麼做,不過當然了,總會有些公認的/最佳實踐的做法。我們會採用“Angular式”的方法,建立類似Angular裡的provider的東西。
在Vue裡建立服務
我們建立一個services資料夾,在裡面我們會手動的建立我們的服務——這個例子裡,我們會建立一個reddit服務。
建立資料夾src/services
在這個資料夾下面建立reddit.js:
import Vue from 'vue';
export default {
getPosts(){
// do something
return [];
}
}
你可以看到,大致和Angular是相似的,不過沒有使用Angular特別的語法比如@Injectable,我們只是用了ES6語法。通過在這裡匯出方法,我們可以在任何需要使用的地方引入它們。
修改src/components/HelloWorld.vue如下:
import RedditService from '../services/reddit';
export default {
name: 'HelloWorld',
data () {
return {
posts: []
}
},
created() {
this.posts = RedditService.getPosts();
}
}
就像在Angular裡匯入一個服務,我們也在這裡匯入了我們剛剛建立的服務——和Angular不同的是沒有別的多餘的步驟了。一旦我們匯入了服務,我們就可以使用它的方法。在這裡我們在生命週期的created(一旦元件被建立就會執行)階段使用了服務的方法,它會把getPosts()結果的值賦給 this.posts。
Http請求
我們有了自己的服務,不過現在它什麼也沒做。我們修改一下讓它從Reddit為我們獲取一些資料。再說一次,Vue不關心你的應用的輸入和輸出,所以它也沒有提供Vue的Http請求的方式。
我們可以使用庫來幫助我們做網路請求(如果你喜歡,你也可以只用javascript原生請求)。兩個流行的庫是 vue-resource(幾乎是預設的)和 axios。如果你想用其他的你只需要把他們新增到你的Vue專案——我們會使用vue-resource。
安裝vue-resource:
npm install vue-resource --save
修改src/main.js 如下:
// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import router from './router'
import VueResource from 'vue-resource'
Vue.config.productionTip = false
Vue.config.ignoredElements = [
'ion-app',
'ion-header',
'ion-navbar',
'ion-title',
'ion-content',
'ion-button',
'ion-list',
'ion-item'
];
Vue.use(VueResource);
/* eslint-disable no-new */
new Vue({
el: '#app',
router,
template: '<App/>',
components: { App }
})
安裝vue-resource之後我們在 main.js 引入了它,然後我們設定應用使用它:
Vue.use(VueResource);
請注意, 我們還添加了 ignoredElements陣列以便我們使用Ionic元件不會造成任何問題。現在,我們有了一種方式來做HTTP 請求。
修改src/services/reddit.js 如下:
import Vue from 'vue';
export default {
getPosts(){
return Vue.http.get('https://www.reddit.com/r/gifs/top/.json?limit=20&sort=hot');
}
}
修改src/components/HelloWorld.vue如下:
import RedditService from '../services/reddit';
export default {
name: 'HelloWorld',
data () {
return {
posts: []
}
},
created() {
RedditService.getPosts().then(response => {
this.posts = response.body.data.children;
});
}
}
我們的服務現在可以獲取資料了,當created生命週期被觸發,它會將請求結果賦給成員變數posts。現在我們可以修改我們的模板來展示我們獲取的資料。
修改src/components/HelloWorld.vue如下:
<template>
<ion-app>
<ion-header>
<ion-navbar>
<ion-title>REDDIT!</ion-title>
</ion-navbar>
</ion-header>
<ion-content>
<ion-list>
<ion-item v-for="post in posts" v-bind:key="post.data.id">
{{post.data.title}}
</ion-item>
</ion-list>
</ion-content>
</ion-app>
</template>
如果你現在開啟你的瀏覽器看一下,應該是這樣的:
總結
當學習Vue的時候有一點很重要,特別是從Angular背景過來的開發者,記住儘管它們很相似,但是它們仍然是使用不同的方式來實現的不同的兩個框架,你不能將你知道的Angular的東西直接用在Vue上。
相關推薦
使用Vue構建Ionic混合APP系列教程(三):服務和Http請求
當學習一個新框架的時候,特別是你之前已經使用一個框架很久了,很自然的你會試圖用之前使用的框架來理解一些別的框架的原理。 正如我上一篇文章提到的,Angular是一個結構嚴密的框架,提供了一切開箱即用的東西,不管如何都會有一個正確的方法去解決問題。Vue的結構並
使用Vue構建Ionic混合APP系列教程(四):資料儲存
大多數應用程式基本都需要儲存一些在應用重新載入時需要的資料。我們經常使用使用者裝置上的本地儲存來實現。當使用Ionic/Angular的時候,我們可以簡單的使用Ionic內建的Storage API,並不需要知道背後的原理——Ionic會自動地選擇最合適的儲存方
使用Vue構建Ionic混合APP系列教程(二):導航
這篇教程我們將從Vue裡最基礎的路由/導航開始講起,然後再看看通過Vue構建的Ionic應用如何導航。 在Vue裡引入Ionic的元件(或者任何其他東西)是非常簡單的,就像你在Angular中做的一樣,只需要把他們注入模板裡,不過當我們想在兩個頁面之間導航時稍
VSphere系列教程(三):ESXI 主機設定開機自動啟動虛擬機器
一、配置 ESXI 主機 登入 WebClient,管理 -> 自動啟動 -> 編輯設定 配置成如下內容,儲
API 系列教程(三):使用 API Resource 來建立自定義 JSON 格式的 API
上一篇教程中我們通過 jwt-auth 實現了 Laravel 的 API 認證。 使用者請求登入介面 http://apidemo.test/api/auth/login 登入成功後,獲取到 JSON 響應,響應頭會帶有 token 資訊。 Authorizatio
webpack4系列教程(三):自動生成專案中的HTML檔案
傳送門: webpack4系列教程(一):初識webpack webpack4系列教程(二):建立專案,打包第一個JS檔案 1. webpack中的CommonJS和ES Mudule 規範 1.1 CommonJs規範 CommonJs規範的出發點:JS沒
pyspider 爬蟲教程(2):AJAX 和 HTTP
AJAX AJAX 是 Asynchronous JavaScript and XML(非同步的 JavaScript 和 XML)的縮寫。AJAX 通過使用原有的 web 標準組件,實現了在不重新載入整個頁面的情況下,與伺服器進行資料互動。例如在新浪微博中,你可以展開一條
API 系列教程(二):結合 Laravel 5.5 和 Vue SPA 基於 jwt-auth 實現 API 認證
上一篇我們簡單演示了 Laravel 5.5 中 RESTful API 的構建、認證和測試,本教程將在上一篇教程的基礎上進行昇華。 我們將結合 Laravel 和 Vue 單頁面應用(SPA),在它們的基礎上引入 jwt-auth 實現 API 認證,由於 Laravel 集成了對 Vue
API 系列教程(一):基於 Laravel 5.5 構建 和 測試 RESTful API
隨著移動開發和 JavaScript 框架的日益流行,使用 RESTful API 在資料層和客戶端之間構建互動介面逐漸成為最佳選擇。 在本系列教程中,將會帶領大家基於 Laravel 5.5 來構建並測試帶認證功能的 RESTful API。 RESTful API 先要了解什麼是
vue移動音樂app開發學習(三):輪播圖組件的開發
hub out webapp width eth reat slot utc -1 本系列文章是為了記錄學習中的知識點,便於後期自己觀看。如果有需要的同學請登錄慕課網,找到Vue 2.0 高級實戰-開發移動端音樂WebApp進行觀看,傳送門。 完成後的頁面狀態以及項目結構如
建站系列教程(三)--如何提高網站搜尋排名?
1、搜尋引擎優化 網站建成能訪問後,還要解決的問題就是如何能使網站排名靠前,通過一定關鍵詞、關鍵字能搜尋到網站,併網站排在前面幾頁,這就需要通過SEO搜尋引擎優化技術來做,一些常用的方法有設定TDK、建站群,增加友情連結、做網站地圖等等。 常規的必須設定標題
Keil(MDK-ARM)系列教程(三)_工程目標選項配置(Ⅰ)
Ⅰ、寫在前面 Options for Target目標選項其完全意思是工程目標選項配置,或許有些人分不清工作空間、工程、目標這三個名詞的意思和區別,下面章節將簡述工作空間、工程、目標他們的意思。 由於目標配置的選項比較多,我將其分為工程目標選項配置(Ⅰ)和工程目標
JDBC系列教程(三)---語句
Statement 本概述是從《JDBCTM Database Access from JavaTM: A Tutorial and Annotated Reference 》這本書中摘引來的。JavaSoft 目前正在準備這本書。這是一本教程,同時也是 JDBC 的重要參考手冊,它將作為 Java 系列的組
Vue.js教程(三):v-if條件判斷
v-if是繼v-bind之後的又一個v-xxx系列 前言 v-if這是我們學習Vue中的的第二個v-xxx系列。學到這裡,不得不提一下的是,所有v-bind或者v-if所關聯的都是Vue的動態變數,
Java NIO系列教程(三) Buffer
原文連結 作者:Jakob Jenkov 譯者:airu 校對:丁一 Java NIO中的Buffer用於和NIO通道進行互動。如你所知,資料是從通道讀入緩衝區,從緩衝區寫入到通道中的。 緩衝區本質上是一塊可以寫入資料,然後可以從中讀取資料的記憶體。這塊記憶體被包裝成N
OAuth 2.0系列教程(三) 角色
作者:Jakob Jenkov 譯者:林浩 校對:郭蕾 OAuth 2.0為使用者和應用定義瞭如下角色: 資源擁有者 資源伺服器 客戶端應用 授權伺服器 這些角色在下圖中表示為: OAuth 2.0規範中的角色定義 資源擁有者是指擁有共享資料的人或應用。比如Facebook或
系列教程(1):學習如何用C#編寫一個軟渲染引擎
宣告:轉載請註明出處!!!本人摘錄其中C#的部分進行翻譯,同時捨棄了其中一些無關緊要的話。另外,英語水平渣,見諒。 由於這位大神是用的win8和XAML,而本人是win7,沒法進行實踐。所以自己用普通的WinForm寫了一個上傳到了github。 地址:https://g
webpack4系列教程(四):處理專案中的資原始檔(一)
傳送門: webpack4系列教程(一):初識webpack webpack4系列教程(二):建立專案,打包第一個JS檔案 webpack4系列教程(三):自動生成專案中的HTML檔案 1. Loader的使用 之前的博文已經介紹了Loader的
webpack4系列教程(二):建立專案,打包第一個JS檔案
傳送門: webpack4系列教程(一):初識webpack 1. 建立專案 1.1 初始化一個專案 首先安裝nodejs,開啟 nodeJs官網 直接下載安裝即可,安裝完畢後開啟命令列工具,進入你的專案資料夾,執行 npm init 進
webpack4系列教程(一):初識webpack
目錄 1. 什麼是webpack 2. webpack核心概念 2.1 入口(entry) 2.2 出口(output) 2.3 loader 2.4 外掛(plugins) 1. 什麼是webpack 先來看看官網對