AngularJS中run方法的巧妙运用


Posted in Javascript onJanuary 04, 2017

前言

AngularJS是google在维护,其在国外已经十分火热,可是国内的使用情况却有不小的差距,参考文献/网络文章也很匮乏。网上关于AngularJS中run方法的介绍也比较少,本文就主要总结了关于AngularJS中run方法的巧妙运用,感兴趣的朋友们可以一起来学习学习。

一、浏览器判断

在angular做微信应用的时候,有时候我们也想把相同一份代码运行在非微信的浏览器上,这时候我们可以在angular的run上写点东西实现~

例如asw.run函数里执行定义一个$rootScope.isWeiXinLogin的函数

.run(['$rootScope', '$route', '$window', '$location', 'Position', '$cookies', 'Request', '$cookieStore',
  function($rootScope, $route, $window, $location, position, $cookies, request, $cookieStore) {
   //非微信的登陆
   $rootScope.isWeiXinLogin = function() {
    //判断是否微信登陆
    var ua = window.navigator.userAgent.toLowerCase();
    //console.log(ua); //mozilla/5.0 (iphone; cpu iphone os 9_1 like mac os x) applewebkit/601.1.46 (khtml, like gecko) version/9.0 mobile/13b143 safari/601.1
    if (ua.match(/MicroMessenger/i) == 'micromessenger') {
     console.log(" 是来自微信内置浏览器");
     return true;
    } else {
     console.log("不是来自微信内置浏览器");
     return false;
    }
   };
]);

这样它能在应用的其他部分之前提前被执行,然后根据$rootScope.isWeiXinLogin的返回我们可以在不同的视图或者控制器有效的进行判断是否为微信浏览器

angular.module('autumnswind').controller('OrderCtrl', ['$rootScope', '$scope', 'Request', '$cookies', '$window', '$routeParams', '$location', 'Tool',
 function($rootScope, $scope, request, $cookies, $window, $routeParams, $location, tool) { 
if ($rootScope.isWeiXinLogin()) {
     ...
    }
   }
]);

二、登陆判断

在run里面写登陆判断是一种不错的方案,例如下面我写的这段,配合cookie和我上面的浏览器判断,当我加载页面的时候我就可以调用$rootScope.goLogin方案来判断是否这个路由所在的视图为登陆,如果有这个合法cookie就让它继续运行,不然则返回login页面进行登陆~

$rootScope.goLogin = function(replace) {
    if ($rootScope.isWeiXinLogin()) {
     if (!replace) {
      $cookieStore.remove('loginBack');
      delete $cookies.loginBack;
      $location.path('login');
     } else {
      $cookies.loginBack = $location.path();
      $location.path('login').replace();
     }
    } else {
     $cookieStore.remove('loginBack');
     delete $cookies.loginBack;
     $location.path('loginWebapp');
    }
   };

三、白名单设置

曾经写过一个这样的函数来实现路由的参数判断,来设置白名单,那时候这个函数还放在全局变量里面~其实回头想想算是不大好的方法

var getParam = function(name) {
 var search = document.location.search;
 var pattern = new RegExp("[?&]" + name + "\=([^&]+)", "g");
 var matcher = pattern.exec(search);
 var items = null;
 if (null != matcher) {
  try {
   items = decodeURIComponent(decodeURIComponent(matcher[1]));
  } catch (e) {
   try {
    items = decodeURIComponent(matcher[1]);
   } catch (e) {
    items = matcher[1];
   }
  }
 }
 return items;
};
//这个是根据路由name来决定进入那个parts
window.cats = getParam('AutumnsWind');

后来改进了下面这个简单的例子,就可以不用用上面那句代码来实现了

$rootScope.$on('$routeChangeSuccess',
     function() {
      var route = window.location.href;
      if (route.indexOf('/hello/') != -1 && route.indexOf('/autumnswind/') != -1) {
       window.AutumnsWindShareUrl = window.location.href;
      } else if (route.indexOf('#/index') != -1) {
       window.AutumnsWindShareUrl = window.location.href;
      } else if (route.indexOf('#/asw'scat/') != -1) {
       window.AutumnsWindShareUrl = window.location.href;
      } else {
       //跳转下载页面
       window.AutumnsWindShareUrl = '~autumns~.cn';
      }
);

上面我们根据路由发生的变化进行白名单的设置,复杂点的话可以运用一下正则,这样就能很好的过滤我们禁止的url,由于例子就不写这么复杂啦~

四、设置公共参数

这个其实就不用写例子了,因为上面的例子也算是这个的一部分吧~

总结

以上就是关于Angular中run方法巧妙运用的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

Javascript 相关文章推荐
仿百度输入框智能提示的js代码
Aug 22 Javascript
js实现的GridView即表头固定表体有滚动条且可滚动
Feb 19 Javascript
JavaScript AJAX之惰性载入函数
Aug 27 Javascript
JavaScript数组随机排列实现随机洗牌功能
Mar 19 Javascript
js实现的二分查找算法实例
Jan 21 Javascript
jQuery prototype冲突的2种解决方法(附demo示例下载)
Jan 21 Javascript
老生常谈onBlur事件与onfocus事件(js)
Jul 09 Javascript
javascript实现根据汉字获取简拼
Sep 25 Javascript
EditPlus 正则表达式 实战(3)
Dec 15 Javascript
javascript显示系统当前时间代码
Dec 29 Javascript
原生js实现打字动画游戏
Feb 04 Javascript
基于vue和bootstrap实现简单留言板功能
May 30 Javascript
JavaScript中的 attribute 和 jQuery中的 attr 方法浅析
Jan 04 #Javascript
快速实现JS图片懒加载(可视区域加载)示例代码
Jan 04 #Javascript
基于jQuery实现选项卡效果
Jan 04 #Javascript
jQuery和CSS仿京东仿淘宝列表导航菜单
Jan 04 #Javascript
JavaScript原生编写《飞机大战坦克》游戏完整实例
Jan 04 #Javascript
jQuery实现联动下拉列表查询框
Jan 04 #Javascript
JavaScript中String对象的方法介绍
Jan 04 #Javascript
You might like
163的邮件用phpmailer发送(实例详解)
2013/06/24 PHP
php ci框架中加载css和js文件失败的解决方法
2014/03/03 PHP
php读取目录所有文件信息dir示例
2014/03/18 PHP
Windows下安装PHP单元测试环境PHPUnit图文教程
2014/10/24 PHP
php中base_convert()进制数字转换函数实例
2014/11/20 PHP
使用PHPWord生成word文档的方法详解
2019/06/06 PHP
JavaScript 函数调用规则
2009/09/14 Javascript
Jquery动态更改一张位图的src与Attr的使用
2013/07/31 Javascript
如何让浏览器支持jquery ajax load 前进、后退功能
2014/06/12 Javascript
js+html获取系统当前时间
2017/11/10 Javascript
JS实现json对象数组按对象属性排序操作示例
2018/05/18 Javascript
react native基于FlatList下拉刷新上拉加载实现代码示例
2018/09/30 Javascript
详解关于Angular4 ng-zorro使用过程中遇到的问题
2018/12/05 Javascript
微信小程序框架的页面布局代码
2019/08/17 Javascript
[04:09]2014DOTA2国际邀请赛Ti西雅图 历届冠军相继出局 BBC综述今日比赛
2014/07/20 DOTA
用Python抢过年的火车票附源码
2015/12/07 Python
python学习 流程控制语句详解
2016/06/01 Python
python dict 字典 以及 赋值 引用的一些实例(详解)
2017/01/20 Python
python开发利器之ulipad的使用实践
2017/03/16 Python
python实现Decorator模式实例代码
2018/02/09 Python
Python使用OpenCV进行标定
2018/05/08 Python
详解Anconda环境下载python包的教程(图形界面+命令行+pycharm安装)
2019/11/11 Python
python代码打印100-999之间的回文数示例
2019/11/24 Python
Python 统计位数为偶数的数字代码详解
2020/03/15 Python
python speech模块的使用方法
2020/09/09 Python
使用 CSS3 中@media 实现网页自适应的示例代码
2020/03/24 HTML / CSS
Desigual英国官网:在线购买原创服装
2018/03/09 全球购物
城市轨道交通工程职业规划书范文
2014/01/18 职场文书
市场营销策划方案
2014/06/11 职场文书
自愿解除劳动合同协议书
2014/09/11 职场文书
大学生入党自荐书
2015/03/05 职场文书
2015年销售内勤工作总结
2015/04/27 职场文书
不同意离婚上诉状
2015/05/23 职场文书
选对餐饮营销策略,营业额才会上涨
2019/08/27 职场文书
MySQL8.0无法启动3534的解决方法
2021/06/03 MySQL
Redis Stream类型的使用详解
2021/11/11 Redis