国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

VS2015 Cordova Ionic移動開發

2019-11-09 15:13:49
字體:
來源:轉載
供稿:網友

感謝作者貢獻出如此好的文章,為了方便學習轉載過來慢慢研究。

原文地址 http://www.cnblogs.com/UltimateAvalon/p/5328642.html

-------------------------------------------------------系列一---------------------------------------------------

一、Windows環境配置

1.如果已經安裝VS2015,打開【工具】-【選項】找到Cordova選項:

image

運行依賴關系查看器,用來檢測開發環境是否完整。

如果檢測顯示:

image

那么就是環境配置完成了??梢灾苯娱_發了。

如果顯示有錯誤頁面,那么按照錯誤頁面的提示,進行對應的環境配置即可。

一般錯誤頁面提示都是缺少對應的依賴組件,包括如下:

Git

Node.js

Android SDK

JDK

這些組件可以在安裝VS時選擇安裝,不過版本不是最新的。所以一般自己手動安裝就行了。

截至本文發布前:VS2015 Cordova目前版本已經是Update 8了。我使用的是Update7,Cordova版本5.1.1,支持Android-23。

注意:Node.js最好安裝x86 32位版本。VS官方給的意見就是推薦使用32位版本,如果你安裝了64為Node.js那么依賴關系檢查有可能提示系統沒有安裝Node.js。如果始終提示沒有安裝Node,建議改為32位。經測試,有的機器安裝64位正常,有的機器安裝64位后會提示找不到Node,根據官方意見改成32位就正常了。

2.如果VS中沒有Cordova選項請看下面步驟:

在【工具-選項】中沒有Cordova選項,那么就是安裝VS時使用了默認安裝選項,默認安裝選項里不安裝Cordova工具。重新打開VS2015的安裝包,執行安裝程序,選擇修改,會彈出所有可安裝的列表,將Cordova選項勾上,重新應用即可。建議在安裝之前把Android SDK裝上,VS安裝Android SDK默認使用Google地址,沒有VPN的話,會等相當長的時間。

image

打開VS安裝程序,選擇修改:

002

勾選Corvoda:

003

注意:勾選Cordova同時會自動默認勾選Android SDK和Git等工具選項,上圖沒有顯示Android SKD選項,因為測試用的電腦沒有連網,切記安裝過程保證網絡通暢。

3.如果新裝VS

推薦使用VS2015 Update1及以上版本。安裝時,選擇自定義,將需要的選項勾選,建議安裝前將Android SDK安裝好。安裝步驟如上圖所示,同時保證網絡通暢。

二、Mac環境配置

1.自己有Mac電腦

下載并安裝Xcode工具,提供編譯和模擬器。

下載安裝Node.js

使用Node指令下載并安裝remotebuild等工具

記得使用前先解鎖root賬戶

su root sudo npm install npm -g sudo npm install remotebuild -g sudo npm install ios-sim -g

安裝完成remotebuild工具后,啟動remotebuild服務:
remotebuild --secure false
注意:--secure false啟用非安全模式,在我機器上測試時使用安全鏈接,無法鏈接成功,建議使用非安全鏈接,啟動結果如下:

G1]6N595ELL$W@HV]BLEGGG

首次啟動時會生成一個PIN碼,記得一定要記下來,需要用來在VS中配置的,如果沒有生成PIN碼使用:

remotebuild -test
或者使用
remotebuild -certificates
來生成。默認首次啟動會生產對應信息:如下
ip:192.168.1.101
PIN:214021
Port:3000
以上的PIN值是默認生成的PIN碼,如果有忘記的,貌似可以使用,如果沒有IP信息,自己在Mac中查看下IP即可。
完成上述步驟,打開VS2015 【工具】-【選項】找到Cordova選項,選擇【IOS配置】:
image
將上述獲取的信息填入即可,備注:建議安全模式選擇false關掉。SSL安全鏈接我簡單試了下,貌似不行,還是關掉吧。
至此IOS環境全部配置完成,只要把Mac電腦和remotebuild遠程編譯服務開啟即可,同時保持網絡通暢。
Xcode的模擬,會在VS發出編譯請求后,自動開啟。

2.沒有Mac電腦

使用微軟賬號申請一個免費的Mac云端虛擬機,或者自己搭建Mac虛擬機即可,環境配置同上。

-------------------------------------------------------系列二---------------------------------------------------

一、創建空白Cordova應用

打開VS,選擇【新建項目】,選擇其它語言javaScript或者TypeScript,語言的話就按個人喜好,喜歡JS就用JS,喜歡TS就用TS,推薦使用TS書寫,代碼結構和可讀性相對更強。本文演示使用JS來書寫,方便不會TS的用戶閱讀。

image

創建完項目后,項目結構如下:

image

www目錄為我們本地應用程序目錄,和一般靜態網站類似。默認主頁為index.html。腳本對應為scripts/index.js

config.xml為項目配置文件,該文件在VS中是可視化操作的。

image

包括項目配置,平臺配置,以及Cordova插件管理,Cordova插件可以在此處添加。

image

打開index.html修改body內容為:

<div class="app">    <p id="deviceready" class="event">Hello Word!</p></div>

并把index.js中自動生成的代碼注釋掉:

復制代碼
function onDeviceReady() {    // 處理 Cordova 暫停并恢復事件    document.addEventListener( 'pause', onPause.bind( this ), false );    document.addEventListener( 'resume', onResume.bind( this ), false );            // TODO: Cordova 已加載。在此處執行任何需要 Cordova 的初始化。    //var element = document.getElementById("deviceready");    //element.innerHTML = 'Device Ready';    //element.className += ' ready';};復制代碼

注意:Update7 之前版本中沒有上述標簽和代碼,將顯示文本改為HelloWord后,直接啟動默認程序即可。

二、啟動Android預覽

image

選擇安卓和默認的Ripple模擬器來預覽程序。同時點開VS輸出面板,查看輸出內容。

image

第一次F5啟動程序的話,由于缺少部分組件和插件等,VS會自動聯網使用node下載,所以點開輸出面板查看輸出信息,如果提示正在應用第三方包,請稍等,或者信息輸出卡在某一個點,那么就是在下載對應的內容,此時VS無法停止編譯,也無法編譯成功,須等部分包下載完成后才能編譯成功,該過程視網絡環境影響,需耐心等待(一般情況在5-10分鐘即可完成,其它情況在1小時以上也有,甚至幾小時也有,具體視網絡情況而定了,開VPN貌似有一定的幫助,但是幫助不是很大)。建議F5啟動后如果編譯不通過,那么就把VS開著,讓它下載直到編譯成功,看到結果為止。如果長時間沒有反應,建議結束VS進程,重啟項目,重新F5編譯。反復幾次就行了。

首次啟動項目和編譯成apk都會有這樣問題,包下載完成后,以后再啟動預覽項目和編譯生成apk都會在一瞬間完成,就無須等待了。

1.Ripple-Android模擬器預覽結果如下:

image

Ripple模擬器是一個網頁版模擬器,開發建議使用,快速預覽界面,功能和兼容性,建議使用模擬器或者真機調試。

2.Android模擬器預覽:

首先啟動:AVD Manager.exe

安卓SDK的模擬器管理工具。一般在:C:/PRogram Files (x86)/Android/android-sdk/AVD Manager.exe

image

創建一個模擬器,分辨率適中即可:

image

確定后,啟動模擬器。由于模擬器啟動速度,運行效率都比較差,建議開啟Intel硬件加速功能,提升模擬器運行效率。

開啟硬件加速方式:

打開SDK Manager.exe 和AVD Manager.exe在同一目錄下:

image

勾選后下載下來。

示例機器目錄在:

C:/Program Files (x86)/Android/android-sdk/extras/intel/Hardware_Accelerated_Execution_Manager

image

安裝完成即可實現模擬器硬件加速效果。如果安裝過程中失敗,那么重啟電腦進入BIOS設置界面,將Intel硬件加速功能設為Enable,保存后重新進入系統安裝。即可安裝成功,硬件加速可以帶來性能的大幅度提升,效果不錯,模擬器主要針對不同機型用作適應性測試,正常開發直接使用Ripple或真機為好。

模擬器效果如下:

image

image

3.Android真機預覽

連接手機到PC上,安裝手機對應的驅動程序。開啟手機USB調試模式。確認手機和PC已經正確連接后:

將項目啟動改為【設備】,F5啟動即可:

image

手機畫面如下:

Screenshot_2016-03-28-14-23-17

三、IOS預覽

1.IOS-Ripple預覽:

image

將設備改為IOS,模擬器選擇Ripple F5啟動預覽后如下:

image

預覽效果和安卓無差別。

2.IOS模擬器預覽

首先確定Mac電腦已經啟動,remotebuild服務已經運行(配置方式見前文)。

確定無誤,F5啟動模擬器運行

image

運行結果如下:

remotebuild服務輸出信息:

MY@RRR9Q{HOA)C}3Y{2KX[B

Xcode模擬器顯示輸出:

$RAYL2[L1M_3NUAYC5YJW5H

由于IOS手機暫時沒有越獄,開發者賬戶已經停用了,暫時沒有真機測試的結果,理論上模擬器成功了,真機上跑問題不是很大。

四、打包APK文件

VS2015中很多人對于打包APK可能不會操作,其實很簡單:

右擊項目【在文件資源管理中打開文件夾】打開項目文件夾,找到build.bat文件。路徑如下:

項目路徑/platforms/android/cordova/build.bat

執行build.bat,執行成功后會在對應目錄中生成build文件夾。路徑如下:

項目路徑/platforms/android/build

APK路徑為:

項目路徑/platforms/android/build/outputs/apk

image

此APK文件可以直接安裝使用了。

五、創建Ionic項目

目前主流的開發框架就是Cordova+Ionic+Angular。所以使用Ionic框架也是必不可少的。在VS上創建Ionic項目很簡單。

打開VS聯機模板,索搜并下載并安裝Ionic的VS模板

image

打開【新建項目】對話框,創建一個Ionic項目:

image

以創建一個側邊欄的Ionic項目為例,創建完成,項目結構如下:

image

F5運行預覽結果如下:

image

image

結束語:至此基本的Hello Word程序開發就結束了,VS開發整體來說效果很好,很多地方很人性化,除了加載包有點慢的讓我抓狂以外,其它都很好。

-------------------------------------------------------系列三---------------------------------------------------

一、基礎設置

1.修改App名稱和程序起始頁

打開config.xml配置文件顯示如下,在【通用】選項卡中,將顯示名稱和起始頁,修改為自己想要的名稱即可。

如需直接在xml文件中修改:右擊config.xml,使用【查看代碼】進行修改即可。

image

 

2.插件安裝

一般在項目開發中,免不了使用第三方的插件,在VS中安裝Cordova插件也是比較簡單的。

可視化打開config.xml文件。切換到【插件】選項卡:

image

核心插件:是包中內置的一些插件。

自定義:可以安裝第三方插件。

已安裝:當前項目已安裝的插件。

在自定義標簽中,有兩種安裝方式,一種是本地,一種是git安裝:

image

git安裝,只需粘貼git地址,點擊箭頭,解析成功后右側顯示插件信息,點擊安裝即可。

image

 

本地安裝,只需要選擇到本地插件所在的文件夾即可,文件目錄中需要包含plugin.xml文件。

例如,插件位于如下目錄中:

image

在VS中只需選擇對應文件夾即可:

image

一些常用插件列表和說明:

插件官網:

http://cordova.apache.org/plugins/

掃碼:

https://github.com/wildabeast/BarcodeScanner.git

應用程序角標:

https://github.com/katzer/cordova-plugin-badge.git

郵件系統:

https://github.com/katzer/cordova-plugin-email-composer.git

對話框:

https://github.com/apache/cordova-plugin-dialogs.git

內置瀏覽器:

https://github.com/apache/cordova-plugin-inappbrowser.git

推送服務(需注冊):

https://github.com/jpush/jpush-phonegap-plugin.git

 

JPush插件在安裝時需要填寫AppKey,安裝顯示界面如下,先填寫申請到的Key再點添加就行了。

image

二、中文亂碼

如果遇到中文亂碼問題,記住一條就行了,統一所有編碼。

index.html顯示中文亂碼,首先保證<meta>設置為utf-8,設置如下:

<meta charset="utf-8">

其次保證文件格式為utf-8編碼,這樣就能解決所有中文亂碼問題了。

VS2015創建的js文件和Html文件默認為GB2312,而Cordova和Ionic默認使用的utf-8.所以會顯示為中文亂碼。一般在視圖模板和js文件中使用中文都會出現亂碼問題。最簡單的解決方案就是,打開html/js文件,點擊【文件】-【高級保存選項】,選擇UTF-8格式保存就行了。

image

image

結束語:今天時間有限,暫時寫到這里,由于Cordova+Ionic開發涉及到很多的知識點,本文原本打算僅僅是介紹VS2015開發Cordova程序的一些注意事項和技巧。

-------------------------------------------------------系列四---------------------------------------------------

一、布局

Ionic模板提供了一個側邊欄菜單示例項目和標簽選項卡示例項目。本案例將兩個布局進行結合,簡單介紹下Ionic的布局。Ionic采用自定義標簽和標準Html標簽相結合。相對于全部使用div方式來說,自定義標簽的可讀性更強。Ionic的界面呈現既可以使用靜態頁面方式呈現,也可以使用Angular提供的路由機制和控制器來控制控制頁面的呈現及數據綁定。

使用VS創建一個空白的Ionic項目。項目中包含一個index.html頁面和app.js的腳本。依照慣例修改項目的基本屬性后,打開index.html頁面和app.js腳本。

復制代碼
<body ng-app="starter">    <ion-pane>        <ion-header-bar class="bar-stable">            <h1 class="title">Ionic Blank Starter</h1>        </ion-header-bar>        <ion-content>        </ion-content>    </ion-pane></body>復制代碼

在body標簽上有一個自定義的屬性ng-app,該屬性是Angular用于標識應用程序模塊的,一般為程序啟動模塊。<ion-pane>標簽內容為ionic標簽,關于Ionic標簽請查閱相關文檔,這里不再贅述。

復制代碼
angular.module('starter', ['ionic']).run(function ($ionicPlatform) {    $ionicPlatform.ready(function () {        if (cordova.platformId === 'ios' && window.cordova && window.cordova.plugins.Keyboard) {            cordova.plugins.Keyboard.hideKeyboardaccessoryBar(true);            cordova.plugins.Keyboard.disableScroll(true);        }        if (window.StatusBar) {            StatusBar.styleDefault();        }    });})復制代碼

angular.module('starter',[])用于定義應用程序的啟動模塊,同時加載ionic模塊。以上代碼是連綴寫法,正常寫法如下:

angular.module().run().config();

或者:

var app = angular.module();app.run();app.config();

這樣寫,基本閱讀起來就沒有問題了。

run()方法用于啟動運行程序。后續會加入config()等相關方法。

、路由和控制器

在www目錄下創建一個templates文件夾并添加一個home.html空白頁面。同時在js文件夾中創建一個controllers.js文件。

image

修改index.html內容如下:

復制代碼
<!DOCTYPE html><html><head>    <meta charset="utf-8">    <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width">    <title></title>    <link href="lib/ionic/CSS/ionic.css" rel="stylesheet">    <link href="css/style.css" rel="stylesheet">    <script src="js/platformOverrides.js"></script>    <script src="lib/ionic/js/ionic.bundle.js"></script>    <script src="cordova.js"></script>    <script src="js/app.js"></script>    <!--添加controllers引用-->    <script src="js/controllers.js"></script></head><body ng-app="starter">    <!--添加導航視圖標簽-->    <ion-nav-view></ion-nav-view></body></html>復制代碼

將原來body內容添加到home.html中,并添加一個視圖標簽:

復制代碼
<ion-view view-title="Home">    <ion-pane>        <ion-header-bar class="bar-stable">            <h1 class="title">標題</h1>        </ion-header-bar>        <ion-content>        </ion-content>    </ion-pane></ion-view>復制代碼

打開app.js,在run()方法后連綴config()方法,配置內容如下:

復制代碼
.config(function ($stateProvider, $urlRouterProvider) {    $stateProvider.state('app', {        url: '/app',        templateUrl: 'templates/home.html'    });    $urlRouterProvider.otherwise('/app');});復制代碼

這里使用$stateProvider.state()方法聲明一個狀態(路由)。$urlRouterProvider.otherwise('/app')設置默認路由。上述代碼功能是在程序啟動時,請求/app的路由,該路由導向home.html視圖模板,并將該視圖內容渲染到<ion-nav-view>導航視圖標簽上。

控制器的作用就是在視圖渲染前將數據送到視圖處理。而數據內容我們可以使用網絡請求從服務器上獲取,也可以使用本地數據等。

例如上述案例需要在視圖渲染之前,動態顯示標題,在控制器中處理如下:

打開controllers.js文件,添加如下代碼:

angular.module('starter.controllers', []).controller('HomeCtrl', function ($scope) {    $scope.msg = 'Hello';});

同時修改app.js文件相關配置,完整app.js為內容如下:

復制代碼
angular.module('starter', ['ionic', "starter.controllers"]) //添加控制器模塊.run(function ($ionicPlatform) {    $ionicPlatform.ready(function () {        if (cordova.platformId === 'ios' && window.cordova && window.cordova.plugins.Keyboard) {            cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);            cordova.plugins.Keyboard.disableScroll(true);        }        if (window.StatusBar) {            StatusBar.styleDefault();        }    });}).config(function ($stateProvider, $urlRouterProvider) {    $stateProvider.state('app', {        url: '/app',        templateUrl: 'templates/home.html',        controller: 'HomeCtrl' //增加控制器處理    });    $urlRouterProvider.otherwise('/app');});復制代碼

在home.html中就可以使用表達式進行數據綁定了。

復制代碼
<ion-view view-title="Home">    <ion-pane>        <ion-header-bar class="bar-stable">            <!--這里修改為數據綁定,動態上下文中獲取-->            <h1 class="title">{{msg}}</h1>        </ion-header-bar>        <ion-content>        </ion-content>    </ion-pane></ion-view>復制代碼

angular的綁定表達式使用{{}}這種方式。

結束語:以上就是一個最簡單的請求-路由-控制的案例。對于數據的操作一般是放在服務端處理的,手機程序使用$http對象從服務器上獲取數據即可。本地數據存儲,最簡單的方式就是使用json存儲。下篇給一個側邊欄菜單和標簽選項卡的案例,作為日后開發的一個基礎骨架。

-------------------------------------------------------系列五---------------------------------------------------

一、創建側邊菜單和導航項目

1.使用VS創建一個Ionic空項目,同時創建一個Ionic SideMenu和Ionic Tabs項目。將SideMenu和Tabs項目里的templates和js文件合并到空項目里,修改js對應的代碼即可。完整項目工程如下:

image

2.App.js代碼修改如下:

復制代碼
/* * 加載所需要的各個模塊 * 上篇教程中加載了controllers控制器模塊 * 本篇教程加載了services服務模塊 */angular.module('starter', ['ionic', 'starter.controllers', 'starter.services']).run(function ($ionicPlatform) {    $ionicPlatform.ready(function () {        if (cordova.platformId === 'ios' && window.cordova && window.cordova.plugins.Keyboard) {            cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);            cordova.plugins.Keyboard.disableScroll(true);        }        if (window.StatusBar) {            StatusBar.styleDefault();        }    });}).config(function ($stateProvider, $urlRouterProvider, $ionicConfigProvider) {    //用來配置各個平臺導航條樣式(統一導航條位置)    $ionicConfigProvider.platform.ios.tabs.style('standard');    $ionicConfigProvider.platform.ios.tabs.position('bottom');    $ionicConfigProvider.platform.android.tabs.style('standard');    $ionicConfigProvider.platform.android.tabs.position('standard');    $ionicConfigProvider.platform.ios.navBar.alignTitle('center');    $ionicConfigProvider.platform.android.navBar.alignTitle('left');    $ionicConfigProvider.platform.ios.backButton.previousTitleText('').icon('ion-ios-arrow-thin-left');    $ionicConfigProvider.platform.android.backButton.previousTitleText('').icon('ion-android-arrow-back');    $ionicConfigProvider.platform.ios.views.transition('ios');    $ionicConfigProvider.platform.android.views.transition('android');    //配置路由    $stateProvider    .state('app', {        url: '/app',        abstract: true,        templateUrl: 'templates/menu.html',        controller: 'AppCtrl'    })    .state('app.search', {        url: '/search',        views: {            'menuContent': {                templateUrl: 'templates/search.html'            }        }    })    .state('app.browse', {        url: '/browse',        views: {            'menuContent': {                templateUrl: 'templates/browse.html'            }        }    })    .state('app.playlists', {        url: '/playlists',        views: {            'menuContent': {                templateUrl: 'templates/playlists.html',                controller: 'PlaylistsCtrl'            }        }    })    .state('app.single', {        url: '/playlists/:playlistId',        views: {            'menuContent': {                templateUrl: 'templates/playlist.html',                controller: 'PlaylistCtrl'            }        }    })    .state('app.tab', {        url: '/tab',        abstract: true,        views: {            'menuContent': {                templateUrl: 'templates/tabs.html'            }        }    })    .state('app.tab.dash', {        url: '/dash',        views: {            'tab-dash': {                templateUrl: 'templates/tab-dash.html',                controller: 'DashCtrl'            }        }    })    .state('app.tab.chats', {        url: '/chats',        views: {            'tab-chats': {                templateUrl: 'templates/tab-chats.html',                controller: 'ChatsCtrl'            }        }    })    .state('app.tab.chat-detail', {        url: '/chats/:chatId',        views: {            'tab-chats': {                templateUrl: 'templates/chat-detail.html',                controller: 'ChatDetailCtrl'            }        }    })    .state('app.tab.account', {        url: '/account',        views: {            'tab-account': {                templateUrl: 'templates/tab-account.html',                controller: 'AccountCtrl'            }        }    });    $urlRouterProvider.otherwise('/app/tab/dash');});復制代碼

controllers.js和services.js文件這里就不貼代碼了,因為不涉及到關鍵代碼的講解。

3.修改menu.html內容,注意注釋說明部分

復制代碼
<ion-side-menus enable-menu-with-back-views="false">    <ion-side-menu-content>        <ion-nav-bar class="bar-stable">            <ion-nav-back-button>            </ion-nav-back-button>            <ion-nav-buttons side="left">                <button class="button button-icon button-clear ion-navicon" menu-toggle="left"></button>            </ion-nav-buttons>        </ion-nav-bar>        <ion-nav-view name="menuContent"></ion-nav-view>    </ion-side-menu-content>    <ion-side-menu side="left">        <ion-header-bar class="bar-stable">            <h1 class="title">Left</h1>        </ion-header-bar>        <ion-content>            <ion-list>                <!--                    這里去掉menu-close屬性,改成menu-toggle="left",                    不然使用返回鍵退出菜單時會自動關閉視圖,                    從而導致應用程序退出。                -->                <ion-item ng-click="login()" menu-toggle="left">                    Login                </ion-item>                <ion-item href="#/app/search" menu-toggle="left">                    Search                </ion-item>                <ion-item href="#/app/browse" menu-toggle="left">                    Browse                </ion-item>                <ion-item href="#/app/playlists" menu-toggle="left">                    Playlists                </ion-item>            </ion-list>        </ion-content>    </ion-side-menu></ion-side-menus>復制代碼

4.最終預覽效果如下

Animation

左邊側滑菜單打開后,怎么在Ripple模擬器中使用返回鍵來退出菜單到主界面:

image

在Ripple的Events菜單中選擇回退按鈕,點擊FireEvent即可模擬點擊返回鍵。

 

二、路由和視圖詳解

1.視圖加載順序

在index.html中有一個主視圖的標簽:

<ion-nav-view></ion-nav-view>

在menu.html中一個menu內容的視圖標簽:

<ion-nav-view name="menuContent"></ion-nav-view>

在選項卡tabs.html中有3個視圖標簽:

復制代碼
<ion-tabs class="tabs-icon-top tabs-color-active-positive">    <!--重新設置路由-->    <ion-tab title="Status" icon-off="ion-ios-pulse" icon-on="ion-ios-pulse-strong" href="#/app/tab/dash">        <ion-nav-view name="tab-dash"></ion-nav-view>    </ion-tab>    <!--重新設置路由-->    <ion-tab title="Chats" icon-off="ion-ios-chatboxes-outline" icon-on="ion-ios-chatboxes" href="#/app/tab/chats">        <ion-nav-view name="tab-chats"></ion-nav-view>    </ion-tab>    <!--重新設置路由-->    <ion-tab title="Account" icon-off="ion-ios-gear-outline" icon-on="ion-ios-gear" href="#/app/tab/account">        <ion-nav-view name="tab-account"></ion-nav-view>    </ion-tab></ion-tabs>復制代碼

我們需要在程序啟動時,加載第一個標簽選項卡內容(tab-dash.html)、標簽選項卡(tabs.html)、左側菜單(menu.html)

視圖的渲染方式:

首先將tab-dash.html喧渲染到tabs.html的<ion-nav-view name="tab-dash"></ion-nav-view>

其次將tabs.html渲染到menu.html的<ion-nav-view name="menuContent"></ion-nav-view>

最后將menu.html渲染到index.html

視圖切換方式:

在點擊menu.html中的菜單項時,會把菜單項所對應的頁面重新渲染到<ion-nav-view name="menuContent"></ion-nav-view>上覆蓋原來的標簽選項卡視圖,這樣在顯示區域就會顯示從菜單打開的視圖了。如果需要返回到之前的標簽選項卡視圖,只需使用返回按鈕就行了。導航視圖的作用就在于可以使用返回按鈕在各層視圖時間切換實現導航作用。

 

2.狀態繼承和激活順序

在上述視圖加載時需要用到如下狀態:

dash狀態:

復制代碼
.state('app.tab.dash', {        url: '/dash',        views: {            'tab-dash': {                templateUrl: 'templates/tab-dash.html',                controller: 'DashCtrl'            }        }    })復制代碼tab狀態:復制代碼
.state('app.tab', {        url: '/tab',        abstract: true,        views: {            'menuContent': {                templateUrl: 'templates/tabs.html'            }        }    })復制代碼

app狀態:

復制代碼
.state('app', {        url: '/app',        abstract: true,        templateUrl: 'templates/menu.html',        controller: 'AppCtrl'    })復制代碼

狀態繼承:

在AngularJs中狀態繼承使用:app.tab.dash,訪問路徑相對也是繼承的:#/app/tab/dash

每個狀態之間使用 . 隔開。父級狀態可以聲明為abstract:true。當abstract為true時,父級狀態默認不激活,只有當子狀態被激活時,父級狀態才被激活。

激活狀態代碼如下:

$urlRouterProvider.otherwise('/app/tab/dash');

該代碼的作用就是默認激活:app.tab.dash狀態。由于app.tab.dash狀態從app.tab繼承的,并且app.tab為abstract,所以app.tab.dash激活時同時會激活app.tab。同理,app是app.tab的父級狀態并且為abstract,所以當app.tab被激活時,會同時激活app狀態。

也就是說該代碼同時激活了3個狀態分別為:app.tab.dash、app.tab、app 。這3個狀態分別對應tab-dash.html選項卡內容頁、tabs.html選項卡頁面、menu.html菜單頁面。所以最終顯示成預覽的效果。

Ionic開發中一個難點就在于怎么使用路由控制視圖的顯示。各個路由(狀態)的激活順序,以及視圖的加載順序都尤為重要。不然就要走很多彎路。比如上述案例,有另外幾種做法,要么是把menu.html內容往各個視圖里粘貼,要么就是把tabs.html內容往各個內容頁粘貼。這種實現方式理論上都可以,但是效率不高,維護起來麻煩。充分利用好狀態的繼承關系,合理的安排視圖布局,是做好Ionic開發的基礎。

 

三、導航條設置

由于Ionic的導航條在IOS和Android呈現的位置不一致,所以使用以下代碼來讓導航條在各個平臺上顯示一致:

復制代碼
//用來配置各個平臺導航條樣式(統一導航條位置)    $ionicConfigProvider.platform.ios.tabs.style('standard');    $ionicConfigProvider.platform.ios.tabs.position('bottom');    $ionicConfigProvider.platform.android.tabs.style('standard');    $ionicConfigProvider.platform.android.tabs.position('standard');    $ionicConfigProvider.platform.ios.navBar.alignTitle('center');    $ionicConfigProvider.platform.android.navBar.alignTitle('left');    $ionicConfigProvider.platform.ios.backButton.previousTitleText('').icon('ion-ios-arrow-thin-left');    $ionicConfigProvider.platform.android.backButton.previousTitleText('').icon('ion-android-arrow-back');    $ionicConfigProvider.platform.ios.views.transition('ios');    $ionicConfigProvider.platform.android.views.transition('android');復制代碼

結束語:以上是一個簡單的整合案例,實現了側滑菜單和導航。詳細的代碼請下載源碼附件。

源碼


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 中西区| 米易县| 西平县| 宁化县| 平凉市| 韶关市| 白水县| 重庆市| 神农架林区| 敦化市| 霍州市| 家居| 双鸭山市| 南召县| 晋江市| 海兴县| 昭苏县| 辽中县| 许昌市| 泰兴市| 荆门市| 怀来县| 广水市| 仙居县| 腾冲县| 呼图壁县| 扬中市| 尼木县| 无极县| 池州市| 那曲县| 瓮安县| 雷波县| 永福县| 洛阳市| 大石桥市| 永仁县| 扎赉特旗| 日土县| 迁安市| 布尔津县|