angular+ionic前後端分離開發項目中的使用

来源:https://www.cnblogs.com/soul-wonder/archive/2018/04/19/8884950.html
-Advertisement-
Play Games

Ionic基於AngularJS構建而成,所以學習一些AngularJS的知識很有必要。Ionic並沒有獨立開發一套完整的Web應用框架,而是對AngularJS進行了擴展,給它添加了大量界面組件和其他的移動端友好的特性。 1.index.html 首先會進入index頁面,裡面引入了angular ...


  Ionic基於AngularJS構建而成,所以學習一些AngularJS的知識很有必要。Ionic並沒有獨立開發一套完整的Web應用框架,而是對AngularJS進行了擴展,給它添加了大量界面組件和其他的移動端友好的特性。

1.index.html

  首先會進入index頁面,裡面引入了angularjs, cordova等js支持,此外還有app.js, controllers.js, services.js等文件。ng-app=" ",是入口相當於java中的main方法,ng-init進行初始化。

  之後:

<ion-nav-bar class="bar-stable">
      <ion-nav-back-button>
      </ion-nav-back-button>      
    </ion-nav-bar>   

  導航欄 : ion-nav-bar 

  回退按鈕 : ion-nav-back-button

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

  導航視圖 : ion-nav-view    路由對應的頁面,用來答題angular中的ui-view 指令  導航中的模板內容將被插入此處

<script id="browser.html" type="text/ng-template">
    <ion-modal-view>... ...</ion-modal-view>
</script>        

<script id="eletterBrowser.html" type="text/ng-template">
    <ion-modal-view>... ...</ion-modal-view>
</script>        

  angular模板載入:type="text/ng-template"是指明這是ng模板,id屬性是指實際使用模板時的一個引用,標簽之間的內容才是實際的模板內容。而且,需要註意,id絕對不是URL,這個script標簽絕對不會發出HTTP請求。  參考:https://blog.csdn.net/yczz/article/details/48316167

  ionic 模態視窗:ion-modal-view  在service.js中註入了$ionicModal,進行初始化操作:fromTemplate(templateString, options)  ,templateString可以是id的值"browser.html"

    效果類似於點擊“用戶協議”之後,會彈出用戶協議具體內容

    參考:http://www.runoob.com/ionic/ionic-ion-modal.html

       https://www.cnblogs.com/CheeseZH/p/4522264.html

2.app.js是主程式,包含一些設置和啟動腳本angular.module('ePolicy', ['ionic', 'ePolicy.controllers', 'ePolicy.services', 'ePolicy.directives', 'ePolicy.filters', 'ionic-datepicker','ionic-datepickerg', 'jm.i18next'])

.run(function($ionicPlatform, $rootScope, $state, $ionicHistory,HttpRequest, $i18next, DeviceInfo, Authorization, LocalStorage, Prompt, HotPush,$location, NoticeCenter, UserAgent, $ionicActionSheet,JPush) {
    $ionicPlatform.ready(function() {
    // splash 放在最前面熱更新才會起作用
    // lang
    //狀態欄(StatusBar)
    //... ...
    }
  //全局變數
  $rootScope.
  // 返回鍵退出 
  $ionicPlatform.registerBackButtonAction(function(e) {}
  // 狀態監聽
  $rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams, lionShow) {}
}

   解釋:

  angular中一切是基於模塊的angular.module

  run方法初始化全局數據,只對全局作用域起作用,如$rootScope.多個控制器之間可以共用數據  angular.run和angular.config的區別

  $ionicPlatform.ready事件是用於檢測當前的平臺是否就緒的事件,相當於基於document的deviceready事件, 在app中一些通用關於設備的設置必須在這個事件中處理

  $ionicPlatform.registerBackButtonAction

  $rootScope.$on('$stateChangeStart'):監聽狀態的改變

    $ionicPlatform文檔:http://www.ionic.wang/js_doc-index-id-56.html

 

.config(function($ionicConfigProvider,$compileProvider, $sceDelegateProvider, $httpProvider, $stateProvider, $urlRouterProvider, $i18nextProvider) {
  
        $stateProvider
        .state('tab', {
            url: '/tab',
            abstract: true,
            templateUrl: 'templates/tabs.html',
            controller: 'TabsCtrl'
        })

        .state('tab.home', {
            url: '/home',
            views: {
                'tab-home': {
                    templateUrl: 'templates/tab-home/tab-home.html?version=20170917',
                    controller: 'HomeCtrl'
                }
            }
        })
        //... ...
        ;
        $urlRouterProvider.otherwise('/tab/home');
}

   解釋:

  ui-Router文檔:https://blog.csdn.net/mcpang/article/details/55101566

  • $state / $stateProvider:管理狀態定義、當前狀態和狀態轉換。包含觸髮狀態轉換的事件和回調函數,非同步解決目標狀態的任何依賴項,更新$location到當前狀態。由於狀態包含關聯的 url,通過$urlRouterProvider生成一個路由規則來執行轉換的狀態。

  • ui-view指示器:渲染狀態中定義的視圖,是狀態中定義的視圖的一個占位符。

  • $urlRouter / $urlRouterProvider:管理了一套路由規則列表來處理當$location發生變化時如何跳轉。最低級的方式是,規則可以是任意函數,來檢查$location,併在處理完成時候返回true。支持正則表達式規則和通過$urlMatcherFactory編譯的UrlMatcher對象的 url 占位符規則。

  • state(name,stateConfig);

  參數:

name:狀態的名稱。
stateConfig:狀態配置對象。配置具有以下各項屬性:
template: string/function,html模板字元串,或者一個返回html模板字元串的函數。
templateUrl:string/function,模板路徑的字元串,或者返回模板路徑字元串的函數。
templateProvider:function,返回html模板字元串或模板路徑的服務。
controller:string/function,新註冊一個控制器函數或者一個已註冊的控制器的名稱字元串。
controllerProvider:function,返回控制器或者控制器名稱的服務
controllerAs:string,控制器別名。
parent:string/object,手動指定該狀態的父級。
resolve:object,將會被註入controller去執行的函數,<string,function>形式。
url:string,當前狀態的對應url。
views:object,視圖展示的配置。<string,object>形式。
abstract:boolean,一個永遠不會被激活的抽象的狀態,但可以給其子級提供特性的繼承。預設是true。
onEnter:function,當進入一個狀態後的回調函數。
onExit:function,當退出一個狀態後的回調函數。
reloadOnSearch:boolean,如果為false,那麼當一個search/query參數改變時不會觸發相同的狀態,用於當你修改$location.search()的時候不想重新載入頁面。預設為true。
data:object,任意對象數據,用於自定義配置。繼承父級狀態的data屬性。換句話說,通過原型繼承可以達到添加一個data數據從而整個樹結構都能獲取到。
params:url里的參數值,通過它可以實現頁面間的參數傳遞。

  name必須是唯一,相當於id,跳轉可以通過$state.go(name);

  地址欄跳轉或a標簽的hrefurl跳轉。

  項目中views有三個tabs

    tab-home、tab-my、tab-policy,每個tab下麵有templateUrl和controller對應,(多個頁面可共用一個controller,但一個頁面不能有多個controller)

  ionic tab(選項卡):在tabs.html頁面

<ion-tabs class="tabs-icon-top tabs-color-active-assertive" ng-class="hideTabs">

  <!-- Home Tab -->
  <ion-tab title="{{'tabs.home' | i18next}}" icon-off="ion-ios-home-outline-custom" icon-on="ion-ios-home-custom" ng-click="click()">
    <ion-nav-view name="tab-home">
    </ion-nav-view>
  </ion-tab>
  <!-- Policy Tab -->
  <ion-tab title="{{'tabs.policy' | i18next}}" icon-off="ion-ios-paper-outline-custom" icon-on="ion-ios-paper-custom"  ng-click="turn('policy')">
    <ion-nav-view name="tab-policy"></ion-nav-view>
  </ion-tab>

  <!-- My Tab -->
  <ion-tab title="{{'tabs.my' | i18next}}" icon-off="ion-ios-person-outline-custom" badge="badges.carts" badge-style="badge-assertive"icon-on="ion-ios-person-custom" ng-click="clickMy()">
    <ion-nav-view name="tab-my"></ion-nav-view>
  </ion-tab>
</ion-tabs>

  api:http://www.runoob.com/ionic/ionic-tab.html

 

  其他模板頁面: 模板視圖 : ion-view 

          ionContent易用的內容區域,該區域可以用Ionic的自定義滾動視圖進行配置,或瀏覽器內置的溢出滾動。

指令:directive

$ionicView.beforeEnter  視圖是即將進入併成為活動視圖。

$ionicView.beforeLeave  視圖將被關閉並且不是活動頁面。

ionic中關於ionicView 的生命周期https://www.cnblogs.com/fangshidaima/p/5894086.html

Angularjs 利用 $on、$emit和$broadcast傳值,利用$watch監聽模型變化:https://blog.csdn.net/missa_fei/article/details/52212319

問題:

項目中input框中的{{name}}數據綁定bug,頁面數據在js中可以獲取,但是在js中通過$scope.name = "zhangsan",頁面是undefined,

解決:$scope.name = {name:"zhangsan"}//賦值成對象,頁面通過{{name.name}}就可以實現數據綁定

總結angular+ionic項目中的問題https://www.cnblogs.com/momozjm/p/6929656.html?utm_source=itdadao&utm_medium=referral

    .directive('timerbutton', function($interval, $i18next, Items, $timeout, HttpRequest, Authorization, Prompt) {
        return {
            restrict: 'AE',
            link: function(scope, element, attrs) {
                scope.timer = false;
                scope.timeout = 60000;
                scope.timerCount = scope.timeout / 1000;
                scope.text = "獲取驗證碼";
                scope.onClick = function() {
                    if(scope.mobileTel.mobileTel == undefined || scope.mobileTel.mobileTel == "") {
                        Prompt.showOnce($i18next("lamessage.APP00015"));
                        return false;
                    };
                    var temp = scope.mobileTel.mobileTel.substring(0, 1);
                    var temp2 = scope.mobileTel.mobileTel.length;
                    if(temp != "1" || temp2 != 11) {
                        Prompt.showOnce($i18next("lamessage.APP00016"));
                        return false;
                    };
                    HttpRequest.query('Policy/getUserInfo/' + Authorization.getLoginVO().userid, true)
                        .success(function(data) {
                            var userInfo = angular.fromJson(data.policyBeanVO.pipBenfRec);
                            var mobileTel = userInfo.clientEnqRec.mobileTel;
                            if(mobileTel==scope.mobileTel.mobileTel){
                        scope.showTimer = true;
                        scope.timer = true;
                        scope.text = "秒後重新獲取";
                        var counter = $interval(function() {
                            scope.timerCount = scope.timerCount - 1;
                        }, 1000);
                        $timeout(function() {
                            scope.text = "獲取驗證碼";
                            scope.timer = false;
                            $interval.cancel(counter);
                            scope.showTimer = false;
                            scope.timerCount = scope.timeout / 1000;
                        }, scope.timeout);
                            HttpRequest.query("Policy/Sms/" + Authorization.getLoginVO().userid + "/" + Authorization.getLoginVO().user.sevrbrh + "/" + scope.mobileTel.mobileTel, true)
                            .success(function(data) {
                                var policyBeanVO = data.policyBeanVO;
                                if(policyBeanVO.message.code != 0) {
                                    Prompt.showOnce(policyBeanVO.message.message);
                                    return false;
                                } else {
                                    scope.validCode = policyBeanVO.message.message;
                                    Items.removeAll();
                                    Items.add(scope.validCode);
                                };
                            });
                        }else{
                            Prompt.showOnce("手機號與系統預留不一致,請核對後重新輸入");
                            return false;
                        }
                    });
                }
            },
            template: '<button on-tap="onClick()"  class="button button-small button-assertive" ng-disabled="timer"><span ng-if="showTimer">{{ timerCount }}</span>{{text}}</button>'
        };
    })
View Code
<timerbutton  show-timer="false">{{'selfservice.Getcode' | i18next}}</timerbutton>

 

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 《HTML5與CSS3基礎教程(第8版)》自第1版至今,一直是講解HTML和CSS入門知識的經典暢銷書,全面系統地闡述HTML5和CSS3基礎知識以及實際運用技術,通過大量實例深入淺出地分析了網頁製作的方方面面。最新第8版不僅介紹了文本、圖像、鏈接、列表、表格、表單等網頁元素,還介紹瞭如何為網頁設計 ...
  • 一、在本地新建一個文件js文件 JS代碼: 二、設置快捷鍵 將上述js文件設置一個快捷鍵到桌面,然後點擊文件屬性設置快捷鍵,你可以使用任何和其他快捷鍵不同的組合鍵。如下圖: 三、效果 在桌面按下方纔設置的快捷鍵,如同時按下Ctrl、Alt和left鍵,效果如下: 按回車即可進行電腦的快速關機。 四、 ...
  • jQuery的touch事件是當用戶觸摸事件(頁面)時觸發的。 jQuery的click事件是當用戶點擊元素時觸發的。 而事件執行流程是手指點擊一個元素,會經過:touchstart --> touchmove -> touchend --》click。所以在觸發touch事件時,預設會自動觸發cl ...
  • tooltip.css 純CSS滑鼠提示工具。 v. 2.0.0 更新日期:2018.4.12 預覽DEMO。 ...
  • 含義 Promise 是非同步編程的一種解決方案,比傳統的解決方案——回調函數和事件——更合理和更強大。它由社區最早提出和實現,ES6 將其寫進了語言標準,統一了用法,原生提供了 Promise 對象。 Promise 對象是一個代理對象(代理一個值),被代理的值在 Promise 對象創建時可能是未 ...
  • 線程分為:單線程和多線程 單線程:一個正在運行的程式(即進行)至少有一個線程,這個線程叫做主線程,只有一個主線程的程式叫做單線程程式,主線程負責執行所有代碼的執行(UI展現及刷新、網路請求、本地存儲等),這些代碼只能順序執行,不能併發執行。 多線程:有多個線程的程式叫做多線程程式,主線程可以開闢多個 ...
  • $scope.yearList = [ {k : "2014", v : "2014"}, {k : "2015", v : "2015"}, {k : "2016", v : "2016"}, {k : "2017", v : "2017"}, ... ...
  • 本文章適合具有一定程式編程語言基礎的人士閱讀,最好學完Java基礎再來閱讀本文章更容易理解語言初學者會看起來比較費勁,不易理解 一.導入腳本 在html導入Javascript的格式是: 兩個關鍵屬性:deter,async deter:defer屬性告訴瀏覽器要等整個頁面載入以後、解析完畢才執行該 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 在我們開發過程中基本上不可或缺的用到一些敏感機密數據,比如SQL伺服器的連接串或者是OAuth2的Secret等,這些敏感數據在代碼中是不太安全的,我們不應該在源代碼中存儲密碼和其他的敏感數據,一種推薦的方式是通過Asp.Net Core的機密管理器。 機密管理器 在 ASP.NET Core ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 順序棧的介面程式 目錄順序棧的介面程式頭文件創建順序棧入棧出棧利用棧將10進位轉16進位數驗證 頭文件 #include <stdio.h> #include <stdbool.h> #include <stdlib.h> 創建順序棧 // 指的是順序棧中的元素的數據類型,用戶可以根據需要進行修改 ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • C總結與剖析:關鍵字篇 -- <<C語言深度解剖>> 目錄C總結與剖析:關鍵字篇 -- <<C語言深度解剖>>程式的本質:二進位文件變數1.變數:記憶體上的某個位置開闢的空間2.變數的初始化3.為什麼要有變數4.局部變數與全局變數5.變數的大小由類型決定6.任何一個變數,記憶體賦值都是從低地址開始往高地 ...
  • 如果讓你來做一個有狀態流式應用的故障恢復,你會如何來做呢? 單機和多機會遇到什麼不同的問題? Flink Checkpoint 是做什麼用的?原理是什麼? ...
  • C++ 多級繼承 多級繼承是一種面向對象編程(OOP)特性,允許一個類從多個基類繼承屬性和方法。它使代碼更易於組織和維護,並促進代碼重用。 多級繼承的語法 在 C++ 中,使用 : 符號來指定繼承關係。多級繼承的語法如下: class DerivedClass : public BaseClass1 ...
  • 前言 什麼是SpringCloud? Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的開發便利性簡化了分散式系統的開發,比如服務註冊、服務發現、網關、路由、鏈路追蹤等。Spring Cloud 並不是重覆造輪子,而是將市面上開發得比較好的模塊集成進去,進行封裝,從 ...
  • class_template 類模板和函數模板的定義和使用類似,我們已經進行了介紹。有時,有兩個或多個類,其功能是相同的,僅僅是數據類型不同。類模板用於實現類所需數據的類型參數化 template<class NameType, class AgeType> class Person { publi ...
  • 目錄system v IPC簡介共用記憶體需要用到的函數介面shmget函數--獲取對象IDshmat函數--獲得映射空間shmctl函數--釋放資源共用記憶體實現思路註意 system v IPC簡介 消息隊列、共用記憶體和信號量統稱為system v IPC(進程間通信機制),V是羅馬數字5,是UNI ...