ionic2項目實戰教程 - 第2講 動態獲取抽屜分類菜單

2021-02-13 IonicBlog
動態獲取抽屜分類

關注微信訂閱號:TongeBlog,可查看[ionic2項目實戰]全套教程,還有各種乾貨等著你!

這一講包含的內容有: 
1.組件(Component)的基本介紹
2.定義服務組件(Service)
3.在ionic2中使用網絡請求

1.組件(Component)的基本介紹

       這個組件是應用入口,啟動時做的一些初始化一般都在這裡調用,先分析下當前代碼,請看注釋。 


2.定義服務組件(Service)

2.1.定義全局配置服務

在app目錄下建一個service文件夾,存放公用服務,再新建一個ConfigService.ts組件,稱它為配置服務組件,主要配置項目中的所有api接口地址。

import {Injectable} from '@angular/core';@Injectable()export class ConfigService {    private hostURL:string = "http://www.tngou.net/tnfs/api";    constructor() {}    // 獲取抽屜分類    getClassify() {        return this.hostURL+"/classify";    } }

2.2定義網絡請求服務

新建一個app.service.ts(官方推薦這種命名)與app.ts同級目錄,內容如下。

import {Injectable, Inject} from  '@angular/core';import {Http, HTTP_PROVIDERS, Response, Headers} from '@angular/http';import {ConfigService} from "./services/ConfigService";import {Observable} from  'rxjs/Observable';import 'rxjs/Rx';@Injectable()export class SexyService {// 構造函數constructor(    private http: Http,    private configService: ConfigService) {}// 獲取抽屜菜單getMenuItems() {    let url = this.configService.getClassify();    return this.http.get(url).map(        res => res.json().tngou    ).catch(this.handleError);}// 處理錯誤private handleError(error: Response) {    console.log(error);    return Observable.throw(error.json().error || 'Server Error');}}

怎麼樣,是不是跟面向對象語言很相似?各關鍵字的解釋如下。

import 導入其他組件

class 聲明類

constructor 構造函數

Injectable() 裝飾器,通過該函數裝飾的服務,才可在組件的構造函數中依賴注入。

3.在ionic2中使用網絡請求

網絡請求的服務定義好了,接下來就可以在項目中使用了,在這之前,我們先看看當前目錄結構;

接下來的工作都在app.ts應用入口組件裡,在應用初始化時,獲取抽屜菜單。
setup 1. 在app.ts頂部導入之前定義的兩個component

import {SexyService} from './app.service' import {ConfigService} from "./services/ConfigService";

setup 2. 將這兩個component加入到提供商

@Component({    templateUrl: 'build/app.html',    providers: [SexyService, ConfigService]})

setup 3. 在app.ts的構造函數中依賴注入這兩個component

constructor(    public platform: Platform,    public menu: MenuController,    public sexyService: SexyService) { }

setup 4. 應用初始化時調用SexyService的getMenuItems()獲取抽屜菜單

ngOnInit() {    // 動態獲取抽屜菜單    this.sexyService.getMenuItems().subscribe(data => {      this.pages = [];      for (var i = 0; i < data.length; i++) {        var c = data[i];        // 組織新的數據        this.pages.push({          item: { id: c.id, title: c.title },          component: ListPage        })      }    })}

app.html的完整代碼如下:

<ion-menu [content]="content">    <ion-toolbar>        <ion-title>天狗閱圖</ion-title>    </ion-toolbar>    <ion-content>    <ion-list>      <button ion-item *ngFor="let p of pages" (click)="openPage(p)">        {{p.item.title}}      </button>    </ion-list>    </ion-content> </ion-menu> <ion-nav [root]="rootPage" #content swipeBackEnabled="false"></ion-nav>`  

在ion-item對應的有一個事件(click)="openPage(p)",可跳轉到列表頁(列表頁在第3講中實現),並傳遞一個對象,具體實現在app.ts中。

app.ts完整代碼如下:

import {Component, ViewChild} from '@angular/core';import {ionicBootstrap, Platform, MenuController, Nav} from 'ionic-angular';import {StatusBar} from 'ionic-native';import {HelloIonicPage} from './pages/hello-ionic/hello-ionic';import {ListPage} from './pages/list/list';import {SexyService} from './app.service' //導入我們的服務import {ConfigService} from "./services/ConfigService";@Component({    templateUrl: 'build/app.html',    providers: [SexyService, ConfigService]})class MyApp {    @ViewChild(Nav) nav: Nav;    rootPage: any = HelloIonicPage;    pages: Array<{ item: any, component: any }>;    constructor(        public platform: Platform,        public menu: MenuController,        public sexyService: SexyService    ) {    }    ngOnInit() {        // 動態獲取抽屜菜單        this.sexyService.getMenuItems().subscribe(data => {          this.pages = [];          for (var i = 0; i < data.length; i++) {            var c = data[i];            // 組織新的數據            this.pages.push({              item: { id: c.id, title: c.title },              component: ListPage            })          }        })    }    initializeApp() {        this.platform.ready().then(() => {          StatusBar.styleDefault();        });    }    // 跳轉到ListPage頁 並傳遞一個對象    openPage(page) {        this.menu.close();        this.nav.push(page.component, {            item: page.item        });    }}ionicBootstrap(MyApp);

OK,這時我們ionic serve試試看?


注意: 在做的過程中,你可能碰到的錯誤:

Error: Can't resolve all parameters for SexyService: (?, ?).
這是因為沒有在自定義的component上增加@Injectable() 裝飾器,這玩意在C#裡叫特性,在java裡叫註解,大家理解就好。

ORIGINAL EXCEPTION: No provider for SexyService!
這個是因為沒有在@Component組件的元數據裡加入providers: [SexyService, ConfigService]提供商,這個告訴注入器如何創建我們自定義的component。

XMLHttpRequest cannot load ******. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8100' is therefore not allowed access.
這個問題在ionic1項目實戰教程中提到過,基本上每個人都會遇到,chrome瀏覽器有一個跨域的插件,非常好用,這裡再給大家分享一下:Access-Control-Allow-Origin,下載地址https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi/related (fq)。安裝成功之後在chrome瀏覽器右上角有個開關,打開後按照如下配置即可解決跨域的問題。 

第2講到這裡就結束了,如果有任何問題,歡迎在下方留言回復,或者通過以下的聯繫方式聯繫到我。

作者:Tonge

出處:微信訂閱號TongeBlog

關於作者:移動團隊負責人,喜歡分享技術,熱愛移動開發,擅長於移動端後臺構架、WebApi接口開發、原生WindowsPhone App開發、Windows Universal Platform App(通用應用程式開發)、原生iOS開發、和移動端跨平臺Ionic開發,專注於各種移動開發技術的研究。對移動端有著非常高的熱情和豐富的開發經驗,熟悉移動端的整個開發流程。

如有問題,可以通過TongeDev@live.cn 聯繫我,非常感謝。

版權申明:歡迎轉載,但必須保留此段文字註明出處,違者必究。

加群交流:[Tonge移動跨平臺開發QQ交流群] 111055535

也可通過下方的二維碼關注

相關焦點

  • ionic集成Crosswalk以及調試ionic項目
    一直使用ionic做項目,但是有的時候速度有點慢,所以只好集成Crosswalk來提升速度。以前集成方法:添加crosswalkionic browser add crosswalk移除crosswalkionic browser revert android     或者   ionic browser remove crosswalk
  • 【知識星球資源】Python3.5-零基礎-高級-項目實戰最新教程
    -共14章節 第03周-Python3.5-零基礎-高級-項目實戰最新教程-共19章節 第04周-Python3.5-零基礎-高級-項目實戰最新教程-共18章節第05周-Python3.5-零基礎-高級-項目實戰最新教程-共14章節 第06周-Python3.5-零基礎-高級-項目實戰最新教程-共12章節 第07周-Python3.5-零基礎-高級-項目實戰最新教程
  • Vue入門-實戰教程
    Vue教程整理文章匯總分類連結歡迎閱讀原文直達。Vue2+VueRouter2+Webpack+Axios 構建項目實戰(一)基礎知識概述:http://www.javazhiyin.com/?p=285Vue2+VueRouter2+Webpack+Axios 構建項目實戰(二)配置環境及構建初始項目:http://www.javazhiyin.com/?
  • ionic bonding(離子鍵)
    我將分三個專題分別講解,這裡先講ionic bond(離子鍵)。(金屬失去電子,非金屬得到電子)Na原子核外電子排布2,8,1Cl原子核外電子排布2,8,7每個原子都非常希望達到最外層為2電子(第一層為最外層時)或者8電子的穩定結構。
  • 【R教程】R做你的第一個機器學習項目教程(一)
    在這篇文章裡你將會用R完成你的第一個機器學習項目。在這個逐步教程裡,你需要做:1 下載和安裝R並且獲取用做機器學習非常有用的R包。2 導入一個數據集並且用統計分析和數據可視化來理解它的結構。機器學習的Hello World利用新的工具進行小項目的最好方法就是首先從iris的分類數據集開始。這是一個好的項目,因為它簡單明了。1 裡面的屬性是數字,所以,你會覺得導入和處理數據會非常上手。2 這是一個分類問題,或許能允許你使用簡單的監督學習算法進行練習。
  • 貝葉斯新聞分類實戰項目詳解
    社會、娛樂、電影等各種分類,數以億計的新聞,通過機器學習完成分類。那麼我們自己能不能自己做一個新聞分類的應用呢?答案是肯定的,本文將帶領大家學習基於貝葉斯方法的新聞分類實戰,快來學習吧。新聞分類也是一樣,根據一篇新聞的內容,推斷其最有可能哪個類別。下面就開始新聞分類的實戰之旅。新聞分類實戰1. 文本分詞就是將獲取到的新聞數據,轉化成有一個個詞語組成的樣式。
  • Tensorflow實戰系列:手把手教你使用LSTM進行文本分類(附完整代碼)
    【導讀】專知小組計劃近期推出Tensorflow實戰系列,計劃教大家手把手實戰各項子任務。
  • Excel動態圖表 | 讓你的圖表動起來
    個人微信號 | (ID:ExcelLiRui520)微信公眾號 | Excel函數與公式(ID:ExcelLiRui)進入公眾號發送函數名稱或關鍵詞,即可免費獲取對應教程更多不同內容、不同方向的Excel視頻課程長按識別二維碼↓獲取
  • 這是一套目錄就2萬字的教程!
    課時 27 : 俯身動作開發課時 28 : 完善項目課時 29 : 項目完善(摔倒動畫與音頻)課時 30 : 動態切換場景管理器課時 31 : 腳本禁用後協程的處理課時 32 : 3D文字開發課時 33 : 動態文字開發【第9套】Unity3D 實戰技術第二版視頻教程(中級篇
  • 【免費】Python2.7教程
    章 : Python 2.7教程課時1:Python簡介課時2:安裝Python課時3:Python解釋器課時4:第一個Python程序課時5:使用文本編輯器課時6:輸入和輸出第2 章 : Python基礎課時7:Python基礎課時8:數據類型和變量課時9:
  • Wii 4.1C繁體中文菜單教程與工具
    91WII ID :最愛派  電玩巴士ID: FF最愛5  切記:請務必按照教程指導操作!如果沒有基本的刷機知識、不了解以下軟體的作用,不建議自己動手,推薦在有人指導的情況下進行操作!  今天我們要講的是WII菜單漢化的詳細教程 。本教程適合3.2U到4.1U的全部主機,如果不是U的主機務必按照步驟改區到U後再操作!  如果是4.2的 保險起見請用ARC完全改區到4.1U後再操作。  如果你的系統已經是4.1U,請下載傻瓜包後直接從第10張圖開始操作。
  • AutoCAD2021練習圖1第2講, cad新手自學入門教程
    AutoCAD2021練習圖1第2講, cad新手自學入門教程 2020-11-29
  • Ionic Lab——一個全新的Ionic IDE
    但我們希望Ionic的工具可以為那些不怎麼使用命令行工具的同學創建一個很好的體驗,所以我們把CLI的功能集成到一個易於使用的UI界面,相信你會喜歡的。Ionic Lab預覽像Ionic命令行一樣,Ionic Lab使得我們可以超級容易地建立和運行一個Ionic項目,包括整個發展周期:新建,編譯,模擬運行,上傳,查看應用程式;在真機上運行應用程式;還有和其他用戶分享。和往常一樣,我們在網絡平臺上投入巨資打造出Ionic Lab。
  • Python Web 開發入門實戰【教學大綱+教學進度表】
    第2節課:緩存系統第十三周第1節課:本地伺服器部署、雲伺服器部署第2節課:MySQL資料庫安裝和使用、擴展Django部署第十四周第1節課:單文件Django第2節課:Django REST項目實戰—在線中文字符識別
  • 百分比動態圖
    當你不想再用餅圖和圓環圖展示百分佔比,而且需要用圖表動態展示百分比變化時,有什麼好辦法呢?今天介紹的百分比動態圖,可以幫你拓展思路。本教程內容擔心記不全的話,可以分享到朋友圈給自己備份一份。除了本文內容,還想全面、系統、快速提升Excel技能,少走彎路的同學,請搜索微信公眾號「LiRuiExcel」點擊底部菜單,或下方二維碼進知識店鋪。更多不同內容、不同方向的Excel視頻課程長按識別二維碼↓獲取
  • 微信公眾號排版實戰教程03
    微信公眾號排版實戰教程第三篇來了,希望能幫到各位熱愛公眾號文章編輯的微信君,請大家多多支持!!!一個沒有態度的微信君在編輯文本段落時,可能是直接複製的文本,也有可能是鍵盤直接敲打出來的文本。如果你能在段首敲打2個空格(輸入法全形狀態),你可以實現首行縮進。
  • 百度官方:《深度學習中文教程實戰版》免費開發!
    保姆級教程|實戰代碼全開源、套路通用、步驟詳盡、重難點逐步推導、易錯代碼逐行解析,真零基礎玩轉深度學習!4.2、針對企業應用型選手,或者非人工智慧相關專業的同學即使你不懂人工智慧這一套,又想應用在自己的業務/畢設/論文裡,可以直接用高層api這種封裝的跟大塊積木一樣簡單的代碼搞定幾個深度學習項目,上手快,實用性強!
  • 15套建築工程測量教程培訓資料,專業實戰講解,滿滿的乾貨分享
    今天分享的全套建築工程測量超全教程,包括GPS導航定位原理培訓講義,電子經緯儀說明書,電子水準儀使用說明書,鋼管混凝土框架金融中心測量施工方案,高層住宅項目測量放線施工方案,建築工程測量培訓講義,目錄GPS導航定位原理培訓講義pptGPS的使用方法培訓講義ppt電子經緯儀說明說電子水準儀使用說明書鋼管混凝土框架金融中心測量施工方案高層住宅項目測量放線施工方案建築工程測量培訓講義框架剪力牆結構電廠高層宿舍施工測量專項方案框架剪力牆結構高層住宅項目施工測量方案(含深基坑
  • Rhino 7 首發高級建模教程!
    犀牛並不難,難在方法RHINO指令雖然高達上千個,但都做了十分精準的分類;網絡上也有很多犀牛的教程,然而大多都在幾十節課,學習下來十分的冗雜,而沒有真正把犀牛在項目中的實戰運用進行詳細的講解。· RHINO工具系統分類--認知篇;· RHINO曲面案例建模--實戰篇;· RHINO高級建模技巧--技巧篇;· Subd  細分建模運用--開掛篇。
  • 楊洋VBA視頻課程:全民一起VBA 基礎+提高+實戰 視頻教程(完整版)
    A:小電家的會員免費觀看所有非加密課程,私聊小電獲取課程目錄。---50套最新電商賺錢課程目錄---閒魚賺錢01-閒魚轉轉賣虛擬產品:月賺5000+的超級玩法02-貓課閒魚實戰班第2期03-閒魚運營閒魚如何快速賣貨精準引流