angular+ionic前后端分离开发项目中的使用
Ionic基于AngularJS构建而成,所以学习一些AngularJS的知识很有必要。Ionic并没有独立开发一套完整的Web应用框架,而是对AngularJS进行了扩展,给它添加了大量界面组件和其他的移动端友好的特性。
版本angularjs1.6.X,ionic1.6.7
1.index.html
首先会进入index页面,里面引入了angularjs, cordova等js支持,此外还有app.js, controllers.js, services.js等文件。ng-app=" ",是入口相当于java中的main方法,ng-init进行初始化。
ionic标签:
<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) {
// 国际化标签翻译
$i18nextProvider.options = {
lng: 'zh', // If not given, i18n will detect the browser language.
fallbackLng: 'zh', // Default is dev
useCookie: false,
useLocalStorage: false,
resGetPath: 'locales/__lng__/__ns__.json'
};
//路由
$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标签的href通过url跳转。
项目中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
其他模板页面: (一般一个template页面对应一个controller)
模板视图 : ion-view
ionContent易用的内容区域,该区域可以用Ionic的自定义滚动视图进行配置,或浏览器内置的溢出滚动。
指令:directive
.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>'
};
})
<timerbutton show-timer="false">{{'selfservice.Getcode' | i18next}}</timerbutton>
ionic中ionicView的生命周期
$ionicView.beforeEnter 视图是即将进入并成为活动视图。
$ionicView.beforeLeave 视图将被关闭并且不是活动页面。
ionic中关于ionicView 的生命周期:https://www.cnblogs.com/fangshidaima/p/5894086.html
https://blog.csdn.net/pq1230/article/details/47126799
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
angular+ionic前后端分离开发项目中的使用的更多相关文章
- 在前后端分离Web项目中,RBAC实现的研究
最近手头公司的网站项目终于渐渐走出混沌,走上正轨,任务也轻松了一些,终于有时间整理和总结一下之前做的东西. 以往的项目一般使用模板引擎(如ejs)渲染出完整页面,再发送到浏览器展现.但这次项目的处理方 ...
- 前后端分离Web项目中,RBAC实现的研究
在前后端分离Web项目中,RBAC实现的研究 最近手头公司的网站项目终于渐渐走出混沌,走上正轨,任务也轻松了一些,终于有时间整理和总结一下之前做的东西. 以往的项目一般使用模板引擎(如ejs)渲染 ...
- 如何在node和vue前后端分离的项目中使用极客验证,用node的方式
1.用express的脚手架和vue-cli的脚手架搭建的项目目录如下图 2.在vue-client的src/component新建一个login.vue文件,作为登录页面,代码如下 <temp ...
- 【坑】前后端分离开发中 跨域问题以及前台不带cookie的问题
文章目录 前言 跨域问题 cookie问题 拦截器导致的跨域问题 后记 前言 场景一: 前台哒哒哒的点击页面,发送请求,但是后台服务器总是没有回应,后台接口虽打了断点,但是根本进不到断点处: 前端:我 ...
- vue+mockjs 模拟数据,实现前后端分离开发
在项目中尝试了mockjs,mock数据,实现前后端分离开发. 关于mockjs,官网描述的是 1.前后端分离 2.不需要修改既有代码,就可以拦截 Ajax 请求,返回模拟的响应数据. 3.数据类型丰 ...
- 基于RAP(Mock)实现前后端分离开发
看看RAP的官方定义: 什么是RAP? (Rigel API Platform) 在前后端分离的开发模式下,我们通常需要定义一份接口文档来规范接口的具体信息.如一个请求的地址.有几个参数.参数名称及类 ...
- SpringBoot,Vue前后端分离开发首秀
需求:读取数据库的数据展现到前端页面 技术栈:后端有主要有SpringBoot,lombok,SpringData JPA,Swagger,跨域,前端有Vue和axios 不了解这些技术的可以去入门一 ...
- springboot 前后端分离开发 从零到整(三、登录以及登录状态的持续)
今天来写一下怎么登录和维持登录状态. 相信登录验证大家都比较熟悉,在Javaweb中一般保持登录状态都会用session.但如果是前后端分离的话,session的作用就没有那么明显了.对于前后端分离的 ...
- Web前后端分离开发(CRUD)及其演变概括
今天学习了前后端分离开发模式又从网上查了一些资料就写了一篇博客分享: 一.为什么分离前后端 1.1早期开发 1.2后段为主mvc模式 1.2.1Structs框架介绍 1.2.2Spring mcv开 ...
随机推荐
- Ansible自动化运维工具-上
[Ansible特点] 1)Ansible与saltstack均是基于Python语言开发的 2)安装使用简单,基于不同插件和模块实现各种软件,平台,版本的管理以及支持虚拟容器多层级的部署 3)不需要 ...
- 角落的开发工具集之Vs(Visual Studio)2017插件推荐
因为最近录制视频的缘故,很多朋友都在QQ群留言,或者微信公众号私信我,问我一些工具和一些插件啊,怎么使用的啊?那么今天我忙里偷闲整理一下清单,然后在这里面公布出来. Visual Studio 201 ...
- bootstrap 一个简单的登陆页面
效果如图:用bootstrap 写的一个简单的登陆 一.修改样式 样式可以自己调整,例如换个背景色之类的,修改 background-color属性就可以 #from { background-col ...
- mysql(1)—— 详解一条sql语句的执行过程
SQL是一套标准,全称结构化查询语言,是用来完成和数据库之间的通信的编程语言,SQL语言是脚本语言,直接运行在数据库上.同时,SQL语句与数据在数据库上的存储方式无关,只是不同的数据库对于同一条SQL ...
- HTML mate标签
META标签分两大部分:HTTP标题信息(http-equiv)和页面描述信息(name). http-equiv http-equiv类似于HTTP的头部协议,它回应给浏览器一些有用的信息,以帮助正 ...
- python 字符串 字节
字符串 字节 a. 字符串转字节 1 2 key = "xxxx" bkey = bytes(key,encoding='utf-8') b. bytearray 数组 1 2 ...
- python--socket粘包
socket粘包 1 什么是粘包 须知:只有TCP有粘包现象,UDP永远不会粘包,首先需要掌握一个socket收发消息的原理, 所谓粘包问题主要还是因为接收方不知道消息之间的界限,不知道一次性提取多少 ...
- python基础-循环
循环 循环 要计算1+2+3,我们可以直接写表达式: >>> 1 + 2 + 3 6 要计算1+2+3+...+10,勉强也能写出来. 但是,要计算1+2+3+...+10000,直 ...
- Qt编译oci教程
Qt编译OCI教程 上图oci.dll 不是oci.lib 我很奇怪网上大部分教程都是写的oci.lib,其实大家可以去oracle目录找一下这个文件,看看是不是在这个目录,我找了一下没发现.而lib ...
- 高下相倾,前后相随——iterator 与 for ... of 循环
iterator 是es6新提供的一种遍历器.本质上是一个接口,为各种不同的数据结构,提供统一的访问机制. 数据只要部署了iterator接口,便是可遍历的数据,标志是具有Symbol.iterato ...