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 实现菜单左右滚动显示示例介绍
Nov 21 Javascript
JavaScript实现获得所有兄弟节点的方法
Jul 23 Javascript
jquery实现网页的页面平滑滚动效果代码
Nov 02 Javascript
浅谈JS中逗号运算符的用法
Jun 12 Javascript
Jquery针对tr td的一些实用操作方法(必看篇)
Oct 05 Javascript
jQuery中用on绑定事件时需注意的事项
Mar 19 Javascript
Map.vue基于百度地图组件重构笔记分享
Apr 17 Javascript
移动端web滚动分页的实现方法
May 05 Javascript
JavaScript截屏功能的实现代码
Jul 28 Javascript
微信小程序页面缩放式侧滑效果的实现代码
Nov 15 Javascript
vuex管理状态 刷新页面保持不被清空的解决方案
Nov 11 Javascript
VUE 项目在IE11白屏报错 SCRIPT1002: 语法错误的解决
Sep 27 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
DedeCMS dede_channeltype表字段注释
2010/04/07 PHP
php学习笔记 数组的常用函数
2011/06/13 PHP
php随机显示指定文件夹下图片的方法
2015/07/13 PHP
jQuery.Highcharts.js绘制柱状图饼状图曲线图
2015/03/14 Javascript
异步安全加载javascript文件的方法
2015/07/21 Javascript
js实现的二分查找算法实例
2016/01/21 Javascript
jQuery ajax请求返回list数据动态生成input标签,并把list数据赋值到input标签
2016/03/29 Javascript
jQuery纵向导航菜单效果实现方法
2016/12/19 Javascript
layui表格实现代码
2017/05/20 Javascript
JS实现json对象数组按对象属性排序操作示例
2018/05/18 Javascript
electron实现qq快捷登录的方法示例
2018/10/22 Javascript
JavaScript键盘事件常见用法实例分析
2019/01/03 Javascript
Vue实现导航栏的显示开关控制
2019/11/01 Javascript
jquery实现吸顶导航效果
2020/01/08 jQuery
javascript实现下拉菜单效果
2021/02/09 Javascript
[01:01:24]DOTA2上海特级锦标赛A组败者赛 EHOME VS CDEC第三局
2016/02/25 DOTA
python实现dict版图遍历示例
2014/02/19 Python
为Python的Tornado框架配置使用Jinja2模板引擎的方法
2016/06/30 Python
Python 使用os.remove删除文件夹时报错的解决方法
2017/01/13 Python
Python使用修饰器执行函数的参数检查功能示例
2017/09/26 Python
特征脸(Eigenface)理论基础之PCA主成分分析法
2018/03/13 Python
解决pyqt5中QToolButton无法使用的问题
2019/06/21 Python
python SQLAlchemy 中的Engine详解
2019/07/04 Python
Python多线程模块Threading用法示例小结
2019/11/09 Python
HTML5实现视频直播功能思路详解
2017/11/16 HTML / CSS
捷克电器和DJ设备网上商店:Electronic-star
2017/07/18 全球购物
蹦床仓库:Trampoline Warehouse
2018/12/06 全球购物
一道SQL面试题
2012/12/31 面试题
护士自我鉴定怎么写
2014/02/07 职场文书
大学生全国两会报告感想
2014/03/17 职场文书
建议书的格式
2014/05/12 职场文书
拾金不昧感谢信
2015/01/21 职场文书
2015年大学生村官工作总结
2015/04/21 职场文书
初中思品教学反思
2016/02/20 职场文书
redis 解决库存并发问题实现数量控制
2022/04/08 Redis
Python 统计序列中元素的出现频度
2022/04/26 Python