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 相关文章推荐
脚本收藏iframe
Jul 21 Javascript
JavaScript中函数声明优先于变量声明的实例分析
Mar 01 Javascript
jQuery下实现等待指定元素加载完毕(可改成纯js版)
Jul 11 Javascript
Jquery取得iframe下内容的方法
Nov 18 Javascript
AngularJS 实现按需异步加载实例代码
Oct 18 Javascript
JS数组排序技巧汇总(冒泡、sort、快速、希尔等排序)
Nov 24 Javascript
jquery+CSS3实现3D拖拽相册效果
Jul 18 Javascript
js+canvas实现动态吃豆人效果
Mar 22 Javascript
ReactNative 之FlatList使用及踩坑封装总结
Nov 29 Javascript
vue+Element-ui实现分页效果实例代码详解
Dec 10 Javascript
浅谈JavaScript_DOM学习篇_图片切换小案例
Mar 19 Javascript
vue element-ui实现动态面包屑导航
Dec 23 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
JavaScript DOM学习第八章 表单错误提示
2010/02/19 Javascript
一个页面元素appendchild追加到另一个页面元素的问题
2013/01/27 Javascript
Jquery的hover方法让鼠标经过li时背景变色
2013/09/06 Javascript
textarea 控制输入字符字节数(示例代码)
2013/12/27 Javascript
深入理解JavaScript系列(42):设计模式之原型模式详解
2015/03/04 Javascript
JS实现文件动态顺序载入的方法
2015/03/07 Javascript
javascript实现框架高度随内容改变的方法
2015/07/23 Javascript
使用jquery+CSS3实现仿windows10开始菜单的下拉导航菜单特效
2015/09/24 Javascript
JS日期加减,日期运算代码
2015/11/05 Javascript
利用iscroll4实现轮播图效果实例代码
2017/01/11 Javascript
vue实现滑动到底部加载更多效果
2020/10/27 Javascript
Node.JS获取GET,POST数据之queryString模块使用方法详解
2020/02/06 Javascript
JavaScript写个贪吃蛇小游戏(超详细)
2020/03/17 Javascript
[00:15]TI9观赛名额抽取
2019/07/10 DOTA
Python中__init__和__new__的区别详解
2014/07/09 Python
pyQt5实时刷新界面的示例
2019/06/25 Python
pytorch在fintune时将sequential中的层输出方法,以vgg为例
2019/08/20 Python
python基于gevent实现并发下载器代码实例
2019/11/01 Python
Python算法的时间复杂度和空间复杂度(实例解析)
2019/11/19 Python
使用TensorBoard进行超参数优化的实现
2020/07/06 Python
Django def clean()函数对表单中的数据进行验证操作
2020/07/09 Python
python实现AdaBoost算法的示例
2020/10/03 Python
python读写数据读写csv文件(pandas用法)
2020/12/14 Python
浏览器实现移动端高性能css3动画(开启gpu加速)
2013/12/23 HTML / CSS
微软中国官方旗舰店:销售Surface、Xbox One、笔记本电脑、Office
2018/07/23 全球购物
出生医学证明样本
2014/01/17 职场文书
个人自荐材料
2014/05/23 职场文书
教师见习报告范文
2014/11/03 职场文书
工程技术负责人岗位职责
2015/04/13 职场文书
2020年个人安全保证书参考模板
2020/01/08 职场文书
nginx实现发布静态资源的方法
2021/03/31 Servers
简单了解 MySQL 中相关的锁
2021/05/25 MySQL
前端监听websocket消息并实时弹出(实例代码)
2021/11/27 Javascript
JAVA SpringMVC实现自定义拦截器
2022/03/16 Python
MYSQL如何查看操作日志详解
2022/05/30 MySQL
CentOS7安装MySQL8的超级详细教程(无坑!)
2022/06/10 Servers