Ionic2环境搭建及文件目录介绍

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ionic2环境搭建及文件目录介绍相关的知识,希望对你有一定的参考价值。

[注]引用自:http://blog.csdn.net/jasonzds/article/details/53821184

1环境搭建

一年前研究混合框架,初步确定了四种方案给公司选择,ionic,hbuilder,wex5,react-native这四个框架各有优缺点,ionic和react-native是国外框架,相对好一点,文档更新很快,就不一一说了,大概的思路都是一样的,js逻辑实现,同时调用原生功能,h5,css3 UI实现,其实他们都有自己的ui框架,当时选择了国内的hbuiler,开发了三款应用,iOSAndroid都有,今天同样公司发展的改变,整体框架都变了,ionic2框架重新提上了方案,决定用ionic2开发hybird应用(具体原因你猜),后续会有系列的博客分享。

 

安装ionic最新版本

ionic官网地址:http://ionicframework.com

1.准备工作

下载 Node.js(下载包),WebStorm(IDE,编写代码,浏览器调试),JDK(webstorm 运行环境),Android SDK(android编译)

Ionic 2 程序主要通过Ionic命令行工具 CLI 来创建和开发,并使用 Cordova 来构建和部署为原生应用程序。也就是说我们需要先安装一些工具来实现程序开发

要创建 Ionic 2 项目,你需要安装最新版本的 CLI 和 Cordova 。在此之前你需要安装最新版本的 Node.js 。点这里 下载安装 Node.js ,然后继续安装 Ionic CLI 和 Cordova 来进行应用程序开发:

命令前面可能需要添加 sudo 提权来进行全局安装。

安装 Ionic

npm install -g ionic

 

安装 Cordova

npm install -g cordova

 

查看ionic版本

ionic –v

 

查看cordova版本

cordova –v

 

更新ionic和cordova包

npm update -g cordova ionic

 

更新已建ionic项目中的js类库,命令行中先进入项目所在目录

ionic lib update

 

展现ionic项目结果(显示在iOSAndroid上的样式)

ionic serve –lab

 

创建项目

ionic start myApp blank(空项目) 

ionic start myApp tabs(带导航条) 

ionic start myApp sidemenu(带侧滑菜单)

 

添加android/ios平台

ionic platform add android/ios(添加android平台/ios) 

ionic platform remove android/ios(移除android平台/ios) 

ionic build android/ios(编译项目apk,ipa)

ionic emulate android/ios(运行项目apk 手机连接在手机运行 模拟器连接在模拟器运行) 

 

生成android/ipa安装包(生成后apk/ipa的存放路径在终端种可以看到)

ionic build android/ios

 

ionicrun android/ios (相当于build + emulate) 

ionicserve (开启服务调试) 

 

指明一个外部的ip地址,可以让外部用户查看。

ionic serv --address 68.52.96.10

 

使用设备运行应用,如果无设备可用将自动使用模拟器

ionic run ios [options]

//options的选项包括:

-l livereload, 实时刷新变化。

-c 打印app里的console

-s 打印设备的console

-p 指定设备的端口

-i 指定livereload的重刷端口

--debug|--release

//当处于livereload模式时,使用r重启客户端,使用 g your_url 跳转到指定url, 使用c启动或关闭console,使用s启动或关闭设备的console, 使用q退出。

 

//查看系统情况

ionic info

 

安卓自带浏览器性能不好,可以强行安装一个壳,这将安装一个Chromium内核。

ionic browser add crosswalk

 

查看可用的browser

ionic browser list

 

删除安装的browser

ionic browser revert android

2 项目目录分析

安装完成后来创建你的第一个 Ionic 应用:

ionic start MenuDemo sidemenu --v2

MenuDemo可以替换成你的应用程序名称。 --v2 表示当前生成的是 Ionic 2 版本的应用,不添加则生成 Ionic 1 应用。

创建完成后 cd 到你的程序目录中,执行 ionic serve 来启动你的Ionic应用,并确保测试在浏览器中能够正常显示:

cd MenuDemo

ionic serve

浏览器运行起来是这样的

 

 

 

 技术分享

 

 

 

 

 

 

 

 

 

 

项目结构

 

 

 

技术分享 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

让我们来剖析一下Ionic 2应用,在我们创建的文件夹中,我们可以看到一个典型的Cordova项目结构。我们可以在其中安装原生插件,并创建平台特定的项目文件。

src/index.html

是 Ionic 2 应用的主入口文件,其目的是设置脚本和CSS引导,然后开始运行我们的应用程序。 我们不会在这个文件中花费大量的时间。

为了让应用正常运作,Ionic 2 会在HTML中寻找 <ion-app> 标记。 在这个例子中,我们有:

<ion-app></ion-app>

并且在下方我们还能看到这样的脚本引用:

<script src="cordova.js"></script>

  <script src="build/polyfills.js"></script>

  <script src="build/main.js"></script>

?  cordova.js 是Cordova应用的需求文件,我们在开发过程中这个文件将会提示404错误,这不需要担心。Cordova将会在构建过程中自动注入这个文件。

?  build/polyfills.js 是在构建过程中自动生成的,我们不需要过多关注。

build/main.js 是一个包含了Ionic, Angular和你的JS脚本的文件。

 

./src/app/app.component.ts

在 app 文件夹中能找到我们的预编译代码。这是Ionic 2应用程序的大部分工作起始的地方。当我们运行 ionic serve 时, app 中的代码将被编译成当前浏览器能够执行的JavaScript版本(当前是ES5)。也就是说我们可以使用TypeScript或更高级别的 ES6+ 进行开发,而在编译时会自动降级为浏览器可识别的版本。

app.component.ts 是应用的入口文件。

在文件中我们能够看到这样的结构:

@Component({

  templateUrl: ‘app.html‘

})

export class MyApp {

  constructor(

  )

}

每个应用程序都有一个根组件,用于控制应用程序的其余部分。这跟Ionic 1和Angular 1中的 ng-app 非常相似。原先的启动配置被放倒了app.module.ts 文件中。

在这个组件中,我们设置了模版文件 app.html,下面我们来看一下这个文件。

./src/app/app.html

app.html 里是我们应用的主模版:

<ion-menu [content]="content">   <ion-header>     <ion-toolbar>       <ion-title>Menu</ion-title>     </ion-toolbar>   </ion-header>
  <ion-content>     <ion-list>       <button menuClose ion-item*ngFor="let p of pages" (click)="openPage(p)">         {{p.title}}       </button>     </ion-list>   </ion-content> </ion-menu>

<!-- Disable swipe-to-go-back because it‘s poor UX to combine STGB with sidemenus --> <ion-nav [root]="rootPage" #content swipeBackEnabled="false"></ion-nav>

 

在这个模板中,我们设置了一个 ion-menu 作为侧面菜单,然后一个 ion-nav 组件作为主要内容区域。 ion-menu 菜单的 [content] 属性绑定到了我们 ion-nav 的本地变量 content 上。所以我们知道哪里会发生动作变化。

接下来,我们来看看如何创建更多页面并执行基本的导航。

添加页面

现在我们对Ionic 2应用的布局有一个基本的掌握,让我们来了解一下在应用中创建和导航到页面的过程。

让我们看一下 app.html 页面的底部:

<ion-nav [root]="rootPage" #content swipeBackEnabled="false"></ion-nav>

注意 [root] 属性绑定。 这本质上是设置了ion-nav组件的“root”页面。 当ion-nav加载时,变量 rootPage 引用的组件将是根页面。

在 app.component.ts 中, MyApp 组件在其构造函数中指定:

import { Component, ViewChild } from ‘@angular/core‘;
import { Nav, Platform } from ‘ionic-angular‘;
import { StatusBar, Splashscreen } from ‘ionic-native‘;

import { Page1 } from ‘../pages/page1/page1‘;
import { Page2 } from ‘../pages/page2/page2‘;


@Component({
  templateUrl: ‘app.html‘
})
export class MyApp {
  @ViewChild(Nav) nav: Nav;

  rootPage: any = Page1;

  pages: Array<{title: string, component: any}>;

  constructor(public platform: Platform) {
    this.initializeApp();

    // used for an example of ngFor and navigation
    this.pages = [
      { title: ‘Page One‘, component: Page1 },
      { title: ‘Page Two‘, component: Page2 }
    ];
  }
  initializeApp() {
    this.platform.ready().then(() => {
      // Okay, so the platform is ready and our plugins are available.
      // Here you can do any higher level native things you might need.
      StatusBar.styleDefault();
      Splashscreen.hide();
    });
  }
  openPage(page) {
    // Reset the content nav to have just this page
    // we wouldn‘t want the back button to show in this scenario
    this.nav.setRoot(page.component);
  }
}

我们看到 rootPage设置成了 Page1,所以 Page1将是在nav控制器中加载的第一个页面。

而page1指向的页面是import { Page1 } from ‘../pages/page1/page1‘;

创建一个页面

接下来,让我们看看我们正在导入的 Page1。在 src/ pages/page1/page1 文件夹中,找到并打开 page1.ts 。

你可能已经注意到每个页面都有自己的文件夹,该文件夹以页面命名。 在每个文件夹内,我们还可以看到一个.html和一个.scss同名文件。 例如,在 page1 / 我们将找到 page1.ts , page1 html 和 page1.scss 。 虽然使用这种模式不是必需的,但它可以有助于保持项目的组织结构。

然后我们找到 page1类,在创建的页面中提供了一个Angular组件和已经使用Ionic的导航系统加载的所有Ionic指令。注意,如果页面是动态加载的,那么它们没有选择器( selector ):

import { Component } from ‘@angular/core‘;
import { NavController } from ‘ionic-angular‘;
@Component({
  selector: ‘page-page1‘,
  templateUrl: ‘page1.html‘
})
export class Page1 {
  constructor(public navCtrl: NavController)  
 }
}

所有的页面都会有一个类和一个关联的模版。让我们再看一下 src/ pages/ page1/ page1.html ,这是一个模版页面:

<ion-header>
  <ion-navbar>
    <button ion-button menuToggle>
      <ion-icon name="menu"></ion-icon>
    </button>
    <ion-title>Page One</ion-title>
  </ion-navbar>
</ion-header>

<ion-content padding>
  <h3>Ionic Menu Starter</h3>

  <p>
    If you get lost, the <a href="http://ionicframework.com/docs/v2">docs</a> will show you the way.
  </p>

  <button ion-button secondary menuToggle>Toggle Menu</button>
</ion-content>

<ion-navbar>是这个页面中导航栏的模版。当我们导航到这个页面,导航栏的按钮和标题作为页面转换的一部分进行过渡。

模板的其余部分是标准的Ionic代码,用于设置我们的内容区域并输出我们的欢迎信息。

创建其他页面

要创建一个其他的页面,我们不需要太多的事情,只要确保配置标题和我们期望在导航栏显示的东西即可。

让我们来看一下 src/pages/page2/ page2.ts。在这里,你会看到一个新的页面被定义:

import { Component } from ‘@angular/core‘;
import { NavController, NavParams } from ‘ionic-angular‘;
@Component({
  selector: ‘page-page2‘,
  templateUrl: ‘page2.html‘
})
export class Page2 {
  selectedItem: any;
  icons: string[];
  items: Array<{title: string, note: string, icon: string}>;
  constructor(public navCtrl: NavController, public navParams: NavParams) {
    // If we navigated to this page, we will have an item available as a nav param
    this.selectedItem = navParams.get(‘item‘);
    // Let‘s populate this page with some filler content for funzies
    this.icons = [‘flask‘, ‘wifi‘, ‘beer‘, ‘football‘, ‘basketball‘, ‘paper-plane‘,
    ‘american-football‘, ‘boat‘, ‘bluetooth‘, ‘build‘];

    this.items = [];
    for (let i = 1; i < 11; i++) {
      this.items.push({
        title: ‘Item ‘ + i,
        note: ‘This is item #‘ + i,
        icon: this.icons[Math.floor(Math.random() * this.icons.length)]
      });
    }
  }
  itemTapped(event, item) {
    // That‘s right, we‘re pushing to ourselves!
    this.navCtrl.push(Page2, {
      item: item
    });
  }
}

此页面将创建一个包含多个项目的基本列表页面。

总的来说,这个页面和我们之前看到的 Page1非常相似。在下一节中,我们将学习如何导航到新页面!

导航到页面

回想上一部分我们在 Page2类中有一个函数,看起来像这样:

itemTapped(event, item) {   // That‘s right, we‘re pushing toourselves!   this.navCtrl.push(Page2, {     item: item   }); }

你可能已经注意到我们引用了一个page2。自己跳到自己,这是一个包含在教程启动器中的页面。

保存好之后。你会发现 ionic serve将重新编译应用程序并刷新浏览器,你的修改将会出现在程序中。让我们在浏览器中重新访问我们的应用程序,当我们点击一个项目,它将导航到项目详细信息页面!请注意,菜单切换按钮将被替换为后退按钮。这是Ionic遵循的原生风格,但可以按需配置。

工作原理

Ionic 2导航的工作原理就像一个简单的堆栈,我们通过push将一个页面推到堆栈的顶端,这会让我们的应用前进一步并显示一个返回按钮。反之,我们也可以pop掉一个页面。因为我们在构造函数中设置了this.navCtrl,我们可以调用this.navCtrl.push() ,并传递我们要导航到的页面。我们还可以传递一个数据对象给我们想要导航到的页面。使用push导航到新页面很简单,而且Ionic的导航系统非常的灵活。你可以查看导航文档找到更多高级导航示例。

当涉及到URL,Ionic 2的工作方式有点不同于Ionic 1。不使用URL导航,可以确保我们可以总是回到一个页面(例如应用程序启动)。这意味着我们不只是限于使用href来导航。无论怎样,我们仍然可以选择在必要时使用网址导航到某个网页。

?   建议熟悉一下TypeScript的基本语法和使用,包括@types使用和d.ts编写。

?   掌握Angular2的基本原理和开发思路。

?   熟悉Ionic 2的所有Components和API。

  了解Cordova的使用方法和插件。


以上是关于Ionic2环境搭建及文件目录介绍的主要内容,如果未能解决你的问题,请参考以下文章

Spring4- 01 - Spring框架简介及官方压缩包目录介绍- Spring IoC 的概念 - Spring hello world环境搭建

Ionic2 + cordova + angular2 打包Android APP环境搭建

Ionic2 环境搭建项目搭建项目发布打包PAK

ionic2-从搭建环境说起

Android 开发环境搭建与编译

Ionic2 开发环境搭建