zoukankan      html  css  js  c++  java
  • 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的使用方法和插件。

  • 相关阅读:
    C#实现清理系统内存
    WinForm 程序加管理员权限
    DataGridView 绑定List集合后实现自定义排序
    swfupload提示“错误302”的解决方法
    C# WinForm捕获全局异常
    C# WinForm应用程序降低系统内存占用方法
    清除webBrowser 缓存和Cookie的解决方案
    ThInkPHP加密和解密cookie(登录操作)
    prestashop 首页轮播幻灯片图片修改
    网页内容分享到微信
  • 原文地址:https://www.cnblogs.com/Summerppp/p/6793365.html
Copyright © 2011-2022 走看看