angular项目一
1.Angularjs第三方模块angular-route和angular-ui-router的区别、差异、不同,
ui-router路由器是一个第三方模块,功能非常强大。它支持一切正常ngroute也可以做许多额外的功能。
http://camnpr.com/javascript/1652.html
值得一提的是上面的这个链接的网址页面,的鼠标选中上去还有另一番景象,值得以后学习。
2.一些需要了解和看的angular的第三方的插件

3.angular.module(name, [requires], [configFn]);
name:字符串类型,代表模块的名称;
requires:字符串的数组,代表该模块依赖的其他模块列表,如果不依赖其他模块,用空数组即可;
configFn:用来对该模块进行一些配置。
4.angular-cookies 先看这篇博客 http://my.oschina.net/loveking/blog/209484
AngularJS 提供了很好的 $cookie 和 $cookieStore API 用来处理 cookies 。 这两个服务都能够很好的发挥HTML5 cookies,当HTML5 API可用时浏览器会选择使用HTML5提供的API,如果不可用则默认选择document.cookies。无论那种方式,你都可以选择使用相同的API来进行工作。
5.angular-resource 看这个博客http://blog.csdn.net/yangnianbing110/article/details/43163155
6.angular-sanitize 这个博客 http://www.mamicode.com/info-detail-322397.html
<td><div ng-bind-html="myHtml"></div></td>
$scope.myHtml = ‘<p style="color:blue">an html\n‘ +
‘<em onclick="this.textContent=\‘code_bunny\‘">click here</em>\n‘ +
‘snippet</p>‘;
7. angularjs-datetime-picker
8. 一个完整的登录的angularjs的登录过程。
后台:首先捕获到/ 的路由然后,发现session中没有用户名,然后返回一个空字符串。
router.get('/', function (req, res, next) {
if (req.session && req.session.currentUser) {
res.render('index', {title: conf.APP.NAME, curUser: JSON.stringify(req.session.currentUser)});
} else {
res.render('index', {title: conf.APP.NAME, curUser: {}});
}
});
然后在index.hbs的引擎中发现了空
<script language="javascript">
var userStr = '{{{curUser}}}';
if (userStr != '[object Object]')
window.curUser = JSON.parse(userStr);
</script>
而我们的hbs渲染是,先渲染布局的layout.hbs.然后在加载所有angularjs依赖的模块,自己定义的js
先加载服务,factory和service,然后全局变量constant,然后config,然后加载run方法,然后加载controller。
所以run之前都是定义,我们直接看run方法,查看,怎么处理这个后台返回的用户名为空的情况。
angular.module('app')
.run(
['$rootScope', '$state', '$stateParams', '$location',
function ($rootScope, $state, $stateParams, $location) {
$rootScope.$state = $state;
$rootScope.$stateParams = $stateParams;
var defaultRoutePage = {
"app.creative":"app.creative.list"
};
//用户状态变化
$rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams) {
if (toState.name.indexOf('access') >= 0)return;// 如果是进入登录界面则允许
console.log(toState.name);
// 如果用户不存在
if (!$rootScope.user || !$rootScope.user.id) {
event.preventDefault();// 取消默认跳转行为
var data = {};
if (toState.name.indexOf('access') < 0) {
data = {from: toState.name, w: 'notLogin'};
}
$state.go("access.signin", data);//跳转到登录界面
} else {
// if (toState.name == "app.dashboard"){
// $state.go("app.order");
// }
}
if (defaultRoutePage[toState.name]){
//$state.go(defaultRoutePage[toState.name]);
event.preventDefault();
}
});
我们看到了定向到了access.signin里边。
.state('access.signin', {
url: '/signin',
templateUrl: 'tpl/page_signin.html',
controller: 'SigninFormController',
resolve: {
deps: ['uiLoad',
function (uiLoad) {
return uiLoad.load(['javascripts/controllers/signin.js']);
}]
}
})
我们看到了js的位置,其中controller就在这个js中。
当输入用户名和密码后,触发了这个controller中的login()方法。
app.controller('SigninFormController', ['$scope', '$http', '$state', '$rootScope', '$stateParams', function ($scope, $http, $state, $rootScope, $stateParams) {
$scope.user = {};
$scope.user.email = localStorage.username;
$scope.authError = null;
$scope.login = function () {
$scope.authError = null;
// Try to login
$http.post('users/signin', {email: $scope.user.email, password: $scope.user.password})
.then(function (response) {
if (!response.data || response.data.id < 1) {
$scope.authError = '用户名或密码不正确';
} else {
localStorage && (localStorage.username = $scope.user.email);
$rootScope.user = response.data;
$state.go('app.dashboard');
//appTools.socket_connect();
}
}, function (x) {
$scope.authError = 'Server Error';
});
};
}])
;
然后http请求users/signin中,出入的参数为{email: ,password:}
在后台的路由中,user中的users/signin 接受到了这个post的请求。
router.post('/signin', function (req, res, next) {
var user = new User(req.body["email"], req.body["password"], -1, conf.GROUPS_DICT.ADMIN);
user.login(function (err, data) {
if (!err && data.length > 0) {
if (data[0].password == user.password) {
delete data[0].password;
req.session.currentUser = data[0];
res.json(data[0]);
} else {
res.json({id: 0});
}
} else {
res.json(null);
}
})
});
然后去调用数据库中的login方法,然后发现了成功的话,req.session.currentUser=data[0];注意此时你必须要注意的是删除密码的user返回去。
然后执行前台的回调。
$http.post('users/signin', {email: $scope.user.email, password: $scope.user.password})
.then(function (response) {
if (!response.data || response.data.id < 1) {
$scope.authError = '用户名或密码不正确';
} else {
localStorage && (localStorage.username = $scope.user.email);
$rootScope.user = response.data;
$state.go('app.dashboard');
//appTools.socket_connect();
}
}, function (x) {
$scope.authError = 'Server Error';
});
localStorag 这个就是永久保留那个域(sessionStorage还有)
然后go app.dashboard这个路由。
.state('app.dashboard', {
url: '/dashboard',
controller: ["$rootScope", "$state", function ($rootScope, $state) {
if ($rootScope.user) {
if ($rootScope.user.permission == -1 || ($rootScope.user.permission & 1) == 1) {
$state.go('app.creative.list');
} else if (($rootScope.user.permission & 2) == 2) {
$state.go('app.order.list');
}
} else {
$state.go('access.signin');
}
}]
// templateUrl: 'tpl/app_dashboard_v1.html'
})
angular项目一的更多相关文章
- 把angular项目整合到.net mvc中
之前的开发选择的是完全舍弃服务端,仅保留最简单web服务器提供angular经打包的静态资源,此外所有的业务与数据请求都访问一个分离的WebApi来实现.不过最近碰到一个需求,有必要使用多个客户端,而 ...
- 个人从源码理解angular项目在JIT模式下的启动过程
通常一个angular项目会有一个个模块(Module)来管理各自的业务,并且必须有一个根模块(AppModule)作为应用的入口模块,整个应用都围绕AppModule展开.可以这么说,AppModu ...
- Angular20 nginx安装,angular项目部署
1 nginx安装(Windows版本) 1.1 下载安装包 到官网下载Windows版本的nginx安装包 技巧01:下载好的压缩包解压即可,无需安装 1.2 启动nginx 进入到解压目录,点击 ...
- Angular4--提速--提升Angular项目的首页打开速度(包含微信登录优化)
Angular项目的首页打开速度很慢,有时候会有几秒的加载时间.如果在手机端访问的话,怕是要等待十多秒,这对用户体验很差.下面参考http://www.cnblogs.com/feiyu159/p/8 ...
- Angular4---部署---将Angular项目部署到IIS上
---恢复内容开始--- Angular项目部署到一个IIS服务器上 1.安装URL rewrite组件: 网址:https://www.microsoft.com/en-us/download/de ...
- 网站开发进阶(二十一)Angular项目信息错位显示问题解决
Angular项目信息错位显示问题解决 绪 最近在项目开发过程中遇到这样一个棘手的问题:查询出所有订单信息后,点击选择某一个订单,查询出的结果是上一次查询所得的结果.而且会出现点击两次才可以显示订单详 ...
- [转]Angular4---部署---将Angular项目部署到IIS上
本文转自:https://www.cnblogs.com/kingkangstudy/p/7699710.html Angular项目部署到一个IIS服务器上 1.安装URL rewrite组件: 网 ...
- [转]Angular项目目录结构详解
本文转自:https://blog.csdn.net/yuzhiqiang_1993/article/details/71191873 版权声明:本文为博主原创文章,转载请注明地址.如果文中有什么纰漏 ...
- angularjs探秘<三> 控制器controller及angular项目结构
先来看一个例子 <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset=&quo ...
- angular项目使用Swiper组件Loop时 ng-click点击事件失效处理方法
在Angular项目中,使用swiper组件进行轮播展示时,存在将swper的loop设置为true时,部分页面的ng-click失效. 原因:将swiper中的looper设置为true时,为了视觉 ...
随机推荐
- JS生成GUID方法
function GUID() { this.date = new Date(); /* 判断是否初始化过,如果初始化过以下代码,则以下代码将不再执行,实际中只执行一次 */ if (typeof t ...
- SQL取某个字符串最后一次出现的位置后面的字符串方法
--sql怎么取某个字符串最后一次出现的位置后面的字符串 declare @s varchar(max); set @s = 'fj/2016815/2016081553677565.pdf'; se ...
- Oracle Schema Objects——Synonyms
Oracle Schema Objects 同义词 同义词 = 表的别名. 现在假如说有一张数据表的名称是“USER1.student”,而现在又为这张数据表起了一个“USER1”的名字,以后就可以直 ...
- linux dd命令详解及使用案例场景
一.dd命令 dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换. 注意:指定数字的地方若以下列字符结尾,则乘以相应的数字:b=512:c=1:k=1024:w=2 参数注释: 1. if ...
- Python开发【Django】:图片验证码、KindEditor
图片验证码 生成图片验证码需要以下: session check_code.py(依赖:Pillow,字体文件) 模块安装 pip install Pillow src属性后面加? 在utils下拷贝 ...
- AC自动机板子题/AC自动机学习笔记!
想知道484每个萌新oier在最初知道AC自动机的时候都会理解为自动AC稽什么的,,,反正我记得我当初刚知道这个东西的时候,我以为是什么神仙东西,,,(好趴虽然确实是个对菜菜灵巧比较难理解的神仙知识点 ...
- HDU1530 Maximum Clique dp
正解:dp 解题报告: 这儿是传送门 又是个神仙题趴QAQ 这题就直接说解法辣?主要是思想比较难,真要说有什么不懂的知识点嘛也没有,所以也就没什么好另外先提一下的知识点QAQ 首先取反,就变成了求最大 ...
- JSP学习(第一课)
JSP页面组成: 比如: 打开网页,右键查看源代码: 打开网页: 注意: <%!%>里面定义的属性是成员属性,相当于类的属性,方法相当于是全局的方法,相当于是类里面的方法.但是它是不可以进 ...
- 剑指offer总结
1.实现Singleton模式 2.二维数组中的查找:每行从左到右递增,每列从上到下递增,输入一个数,判断数组中是否存在该数 1 2 8 9 2 4 9 12 4 7 10 13 6 8 11 ...
- VMware跨电脑移动Linux虚拟机
环境:VMware-Workstation-12-Pro,Windows-10,CentOS-6.9-x86_64,Xshell5 概况 vmware自带的快照,克隆功能,都可以实现备份虚拟机的功能, ...