[ionic开源项目教程] - 第15讲 ionic用户个人中心登录注册的实现
第15讲 ionic用户个人中心登录注册的实现
这一讲包括登陆、注册、个人中心、个人资料页面的实现。
在一讲的改动有四个地方:
- 在config.js里配置接口地址
- 完善个人中心的服务层(service)
- 完善个人中心的控制器部分(controller)
- 完善个人中心的视图部分(view)
- 登陆注册的视图部分(view)
[效果图]

1.在config.js里配置接口地址
var settings = {
client_id: '122440',
client_secret: '576ec4d35f1b59363ef51171bc95421a',
rows: 10
}
var server = {
domain: "http://www.tngou.net/api",
imgUrl: "http://tnfs.tngou.net/image"
}
var urls = {
info_show: server.domain + "/info/show?id=",
login: server.domain + '/oauth2/login?callback=JSON_CALLBACK&client_id=' + settings.client_id + '&client_secret=' + settings.client_secret,
reg: server.domain + '/oauth2/reg?callback=JSON_CALLBACK&client_id=' + settings.client_id + '&client_secret=' + settings.client_secret,
user: server.domain + '/user?callback=JSON_CALLBACK',
favorite: server.domain + '/my/favorite',
favoriteAdd: server.domain + '/favorite/add',
favoriteDelete: server.domain + '/favorite/delete',
}
var cache = {
user: "_user",
token: '_token'
}
说明:
- client_id 开发者id
- client_secert 请求凭证
2.完善个人中心的服务层(service)
.service('AccountService', function ($http) {
var $this = this;
// 获取缓存用户信息
this.getCacheUser = function () {
return angular.fromJson(window.localStorage[cache.user]);
}
// 登陆
this.login = function (name, password, callback) {
var url = urls.login + "&name=" + name + "&password=" + password;
$http.jsonp(url).success(function (response) {
if (response.status == true) {
window.localStorage[cache.token] = response.access_token;
$this.user(callback);
} else {
alert("用户名和密码不匹配!");
}
})
}
// 获取信息
this.user = function (callback) {
var url = urls.user + "&access_token=" + window.localStorage[cache.token];
$http.jsonp(url).success(function (response) {
console.log(response);
window.localStorage[cache.user] = angular.toJson(response);
callback(response)
})
}
// 注册
this.reg = function (account, email, password) {
var url = urls.reg + "&account=" + account + "&email=" + email + "&password=" + password;
$http.jsonp(url).success(function (response) {
if (response.status == false) {
alert(response.msg);
} else {
window.localStorage[cache.token] = response.access_token;
}
})
}
//获取收藏列表
this.getFavorites = function (page) {
var url = urls.favorite + "?page=" + page + "&rows" + settings.rows + "&access_token=" + window.localStorage[cache.token];
return $http.jsonp(url);
}
//删除收藏
this.deleteFav = function (id, type) {
var url = urls.favoriteDelete + "?id=" + id + "&type=" + type + "&access_token=" + window.localStorage[cache.token]
return $http.jsonp(url);
}
//添加收藏
this.addFav = function (id, type, title) {
var url = urls.favoriteAdd + "?id=" + id + "&type=" + type + "&title=" + title + "&access_token=" + window.localStorage[cache.token]
return $http.jsonp(url);
}
})
3.完善个人中心的控制器部分(controller)
.controller('AccountCtrl', function ($scope, $rootScope, $ionicPopup, $ionicModal, $state, $ionicTabsDelegate, $ionicSlideBoxDelegate, AccountService) {
$rootScope.isLogin = false;
$ionicModal.fromTemplateUrl('templates/tab-account-login.html', {
scope: $scope,
animation: 'slide-in-up'
}).then(function (modal) {
$scope.modal = modal;
});
$scope.loginData = {
name: '',
password: ''
}
$scope.regData = {
account: '',
email: '',
password: ''
}
$scope.user = {
account: "未登陆"
}
$scope.login = function () {
AccountService.login($scope.loginData.name, $scope.loginData.password, function (user) {
//account avatar domain email gender id integral isemail isphone status time title weiboid
$scope.user = user;
$rootScope.isLogin = true;
$scope.modal.hide();
});
}
$scope.doRefresh = function () {
AccountService.user(function (result) {
if (result.status == false) {
$ionicPopup.alert({
title: '提示',
template: result.msg
});
}
$scope.user = result;
$scope.$broadcast('scroll.refreshComplete');
});
}
$scope.goDetails = function () {
if ($rootScope.isLogin == false) {
$scope.modal.show();
} else {
$state.go('tab.account-details');
$ionicTabsDelegate.showBar(false);
}
}
$scope.$on('$ionicView.beforeEnter', function () {
console.log('已经成为活动视图');
var user = AccountService.getCacheUser();
if (user == undefined) {
$rootScope.isLogin = false;
$scope.user = {};
} else {
if (user.status != false) {
$rootScope.isLogin = true;
$scope.user = user;
}
}
$ionicTabsDelegate.showBar(true);
});
var accountTab = $ionicTabsDelegate.$getByHandle('accountTab');
var accountSlide = $ionicSlideBoxDelegate.$getByHandle('accountSlide');
$scope.register = function () {
AccountService.reg($scope.regData.account, $scope.regData.email, $scope.regData.password);
}
$scope.accountSelectedTab = function (index) {
accountSlide.slide(index);
}
$scope.accountSlideChanged = function (index) {
accountTab.select(accountSlide.currentIndex());
};
})
.controller('AccountDetailsCtrl', function ($scope, $rootScope, $ionicHistory, AccountService) {
// 注销登陆
$scope.logout = function () {
// 删除本地缓存
window.localStorage.removeItem(cache.user);
window.localStorage.removeItem(cache.token);
$rootScope.isLogin = false;
$ionicHistory.goBack();
}
$scope.user = AccountService.getCacheUser();
$scope.doRefresh = function () {
AccountService.user(function (user) {
$scope.user = user;
$rootScope.isLogin = true;
$scope.$broadcast('scroll.refreshComplete');
});
}
})
说明 : 这里包含了account和accountdetails的controller。
4.完善个人中心的视图部分(view)
tab.account.html
<ion-view view-title="我">
<ion-content>
<ion-refresher pulling-text="下拉刷新" on-refresh="doRefresh()"></ion-refresher>
<ion-list>
<a class="item item-avatar item-icon-right" ng-click="goDetails()">
<img src="img/ben.png" ng-src="{{user.avatar==undefind?'':imgUrl+user.avatar}}">
<h2><span>{{user.account==undefind?'未登陆':user.account}}</span></h2>
<p>积分:<span>{{user.integral}}</span></p>
<i class="icon ion-ios-arrow-right"></i>
</a>
<ion-item class="item-divider item-gap">
</ion-item>
<div class="item item-icon-right">
<span>我的收藏</span>
<i class="icon ion-ios-arrow-right"></i>
</div>
<ion-item>
当前版本
<span class="item-note">1.0.0</span>
<!--<span class="item-note" ng-bind="appVersion"></span>-->
</ion-item>
<ion-item>
联系作者
<span class="item-note">微信订阅号:TongeBlog</span>
</ion-item>
<ion-item onclick="window.open('https://git.oschina.net/tonge/TongeNewsApp', '_blank', 'location=yes')">
此项目已开源
</ion-item>
<ion-item class="text-center">
<img src="img/TongeBlog.jpg" width="120" /><br> @TongeBlog
</ion-item>
</ion-list>
</ion-content>
</ion-view>
tab-account.details.html
<ion-view view-title="个人中心">
<ion-content bindonce="user">
<ion-refresher pulling-text="下拉刷新" on-refresh="doRefresh()"></ion-refresher>
<ion-list>
<a class="item item-avatar" href="#">
<img src="img/ben.png" ng-src="{{imgUrl+user.avatar}}">
<h2><span>{{user.account}}</span></h2>
<p>积分:<span>{{user.integral}}</span></p>
</a>
<ion-item>
邮箱
<span class="item-note">{{user.email}}</span>
</ion-item>
<ion-item>
性别
<span class="item-note">{{user.gender | toSex :user.gender}}</span>
</ion-item>
<ion-item>
出生年月
<span class="item-note">{{user.birth}}</span>
</ion-item>
<ion-item>
省份
<span class="item-note">{{user.province}}</span>
</ion-item>
<ion-item>
城市
<span class="item-note">{{user.city}}</span>
</ion-item>
<ion-item>
个性签名
<span class="item-note">{{user.signature}}</span>
</ion-item>
<ion-item>
电话
<span class="item-note">{{user.phone}}</span>
</ion-item>
<ion-item>
QQ
<span class="item-note">{{user.qq}}</span>
</ion-item>
<ion-item>
微博
<span class="item-note">{{user.weibo}}</span>
</ion-item>
<ion-item>
注册时间
<span class="item-note">{{user.time}}</span>
</ion-item>
<ion-item>
<button ng-click="logout()" class="button button-full button-positive">注销
</button>
</ion-item>
</ion-list>
</ion-view>
说明:这里包含了个人中心tab-account.html和个人资料页tab-account-details.html。
5. 登陆注册的视图部分(view)
<ion-modal-view title="登陆">
<div class="bar-balanced bar bar-header item-input-inset">
<h2 class="title">登陆</h2>
<button class="button button-clear" ng-click="modal.hide()">关闭</button>
</div>
<ion-content class="has-header">
<ion-slide-box class="has-header" delegate-handle="accountSlide" show-pager="false" on-slide-changed="accountSlideChanged($index)">
<ion-slide>
<div class="list list-inset login-hover">
<div class="text-center">
<img src="img/TongeLog.png" height="38%" width="38%" />
</div>
<label class="item item-input">
<i class="ion-ios-person-outline"></i>
<input type="text" ng-model="loginData.name" placeholder="账号">
</label>
<label class="item item-input">
<i class="ion-ios-locked-outline"></i>
<input type="password" ng-model="loginData.password" placeholder="密码">
</label>
<div class="text-center">
</div>
<div class="item text-center">
<button class="button button-balanced" ng-click="login()">登陆</button>
</div>
</div>
</ion-slide>
<ion-slide>
<div class="list list-inset login-hover">
<div class="text-center">
<img src="img/TongeLog.png" height="38%" width="38%" />
</div>
<label class="item item-input">
<i class="ion-ios-person-outline"></i>
<input type="text" ng-model="regData.account" placeholder="账号">
</label>
<label class="item item-input">
<i class="ion-ios-email-outline"></i>
<input type="text" ng-model="regData.email" placeholder="邮箱">
</label>
<label class="item item-input">
<i class="ion-ios-locked-outline"></i>
<input type="password" ng-model="regData.password" placeholder="密码">
</label>
<div class="text-center">
</div>
<div class="item text-center">
<button class="button button-balanced" ng-click="register()">确认注册</button>
</div>
</div>
</ion-slide>
</ion-slide-box>
</ion-content>
<ion-tabs delegate-handle="accountTab" class="tabs-striped tabs-top">
<ion-tab on-select="accountSelectedTab(0)" title="登陆"></ion-tab>
<ion-tab on-select="accountSelectedTab(1)" title="注册"></ion-tab>
</ion-tabs>
</ion-modal-view>
说明:登陆注册页面放在一个.html使用slide-box里实现的。
备注:所有的代码都已开源,并上传至OSC,开源地址在订阅号中回复"开源地址"获取。
[ionic开源项目教程] - 第15讲 ionic用户个人中心登录注册的实现的更多相关文章
- [ionic开源项目教程] - 第14讲 ionic解决跨域问题
[ionic开源项目教程] 第14讲 使用jsonp解决跨域问题 相信很多朋友在开发中都会遇到以下这个问题. No 'Access-Control-Allow-Origin' header is pr ...
- [ionic开源项目教程] - 第12讲 医疗模块的实现以及Service层loadMore和doRefresh的提取封装
关注微信订阅号:TongeBlog,可查看[ionic开源项目]全套教程. 这一讲主要实现tab2[医疗]模块,[医疗]模块跟tab1[健康]模块类似. [ionic开源项目教程] - 第12讲 医疗 ...
- [ionic开源项目教程] - 第11讲 封装BaseController实现controller继承
关注微信订阅号:TongeBlog,可查看[ionic开源项目]全套教程. 截止到第10讲,tab1[健康]模块的功能基本已经完成了,但这一讲中,controller层又做了较大的改动,因为下一讲中t ...
- [ionic开源项目教程] - 第10讲 新闻详情页的用户体验优化
目录 [ionic开源项目教程] 第1讲 前言,技术储备,环境搭建,常用命令 [ionic开源项目教程] 第2讲 新建项目,架构页面,配置app.js和controllers.js [ionic开源项 ...
- [ionic开源项目教程] - 第9讲 新闻详情页的实现
目录 [ionic开源项目教程] 第1讲 前言,技术储备,环境搭建,常用命令 [ionic开源项目教程] 第2讲 新建项目,架构页面,配置app.js和controllers.js [ionic开源项 ...
- [ionic开源项目教程] - 第8讲 根据菜单分类加载数据(重要)
[ionic开源项目教程] - 第8讲 根据菜单分类加载数据(重要) [效果图] 注意 今天遇到一个比较棘手的问题,就是左右滑动菜单的设计不合理性,所以tab1.html对应的视图层和control ...
- [ionic开源项目教程] - 第13讲 Service层优化,提取公用Service,以及生活和农业两大模块的实现
关注微信订阅号:TongeBlog,可查看[ionic开源项目]全套教程. 这一讲主要实现生活和农业两大模块的实现,在这个过程中,对service层提取出一个公用的BaseService. 这一讲分为 ...
- [ionic开源项目教程] - 第1讲 前言,技术储备,环境搭建,常用命令
前言 这是一个系列文章,将持续更新到项目完结,从环境搭建开始讲解,包括实战开发中遇到的各种问题的解决方案,都将毫无保留的分享给大家. 技术储备 开始本项目之前,请确保自己对以下技术点都有所了解. ht ...
- [ionic开源项目教程] - 第2讲 新建项目,配置app.js和controllers.js搭建基础视图
新建项目 由项目功能架构图选择合适的页面架构,这里选用Tab,ionic新建项目,默认的模板就是tab. $ ionic start TongeNews Creating Ionic app in f ...
随机推荐
- DirectShow 最简单的入门 -- 播放一段视频
#include <dshow.h> #pragma comment(lib,"strmbase.lib") #pragma comment(lib,"qua ...
- Rake::TestTask 介绍
Rake::TestTask 介绍 通常我们创建一个新的项目的时候,会建立一个test或者spec的文件夹来存放测试的文件,运行这些测试需要单独的命令,比如在项目目录下执行rspec .或者ruby ...
- HDU 2674 N!Again(数学思维水题)
题目 //行开始看被吓一跳,那么大,没有头绪, //看了解题报告,发现这是一道大大大的水题,,,,,//2009 = 7 * 7 * 41//对2009分解,看它有哪些质因子,它最大的质因子是41,那 ...
- IIS 发布程序的一些心得
1.应用程序池一般自己建立对应Framework版本的程序池,并托管管道模式为经典 2.在IIS根目录双击,右侧的“ISAPI和CGI限制” 双击打开,将自己所需要的Framework版本的限制设置为 ...
- hdu 4726 Kia's Calculation
思路:刚开始想复杂了. 看解题报告后才知道这题挺简单的,看来还是要多训练啊!!! 单独处理首位的数字,不能为0.其他的就好处理了,从大到小依次找下去就可以了…… 代码如下: #include<i ...
- SELECT 语句不详解
INSERT INTO ... SELECT 语句, 将查询的结果插入到一张新表中(可为临时表) DECLARE @MyTable Table ( SalesOrderID int, Custome ...
- API 版本控制
http://www.oschina.net/translate/introduction-to-web-api-versioning
- 创建DB2数据库时报错--SQL1052N 数据库路径不存在(Windows)(转载)
用DB2 v9.7新建数据库的时候,默认路径为:D:\ 把缺省路径“写的是D:\XXX(此目录存在),新建时提示如下:SQL1052N 数据库路径 "D:\XXX" 不存在.如下: ...
- C语言学习资料(转载)
◆经典C源程序100例:http://post.baidu.com/f?kz=8618367 ◆时钟的驻留程序:http://post.baidu.com/f?kz=10822377 ◆数据结构暨若干 ...
- inno setup判断是Windows系统版本(其实还是Delphi代码,还能检查域控制器和家庭版)
1.设置Windows最低版本要求 [Setup]: MinVersion 格式: a.bb,c.dd,这里 a.bb 是 Windows 版本,c.dd 是 Windows NT 版本. 默认值: ...