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 相关文章推荐
xtree.js 代码
Mar 13 Javascript
基于javascipt-dom编程 table对象的使用
Apr 22 Javascript
选择复选框按钮置灰否则按钮可用
May 22 Javascript
点击标签切换和自动切换DIV选项卡
Aug 10 Javascript
详解js中class的多种函数封装方法
Jan 03 Javascript
js右下角弹出提示框示例代码
Jan 12 Javascript
js组件SlotMachine实现图片切换效果制作抽奖系统
Apr 17 Javascript
js删除Array数组中指定元素的两种方法
Aug 03 Javascript
AngularJS表格添加序号的方法
Mar 03 Javascript
canvas+gif.js打造自己的数字雨头像的示例代码
Oct 26 Javascript
vue结合element-ui使用示例
Jan 24 Javascript
TypeScript魔法堂之枚举的超实用手册
Oct 29 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
PHP页面间传递参数实例代码
2008/06/05 PHP
基于PHP文件操作的详解
2013/06/05 PHP
destoon文章模块调用企业会员资料的方法
2014/08/22 PHP
PHP读取文件内容的五种方式
2015/12/28 PHP
Yii2增删改查之查询 where参数详细介绍
2016/08/08 PHP
Laravel框架中队列和工作(Queues、Jobs)操作实例详解
2020/04/06 PHP
jquery tools 系列 scrollable(2)
2009/09/06 Javascript
jquery $.ajax各个事件执行顺序
2010/10/15 Javascript
jQuery页面滚动浮动层智能定位实例代码
2011/08/23 Javascript
AngularJS中的包含详细介绍及实现示例
2016/07/28 Javascript
关于Vue背景图打包之后访问路径错误问题的解决
2017/11/03 Javascript
nodejs爬虫初试superagent和cheerio
2018/03/05 NodeJs
vue实现点击展开点击收起效果
2018/04/27 Javascript
Vue+webpack项目配置便于维护的目录结构教程详解
2018/10/14 Javascript
Angular封装表单控件及思想总结
2019/12/11 Javascript
js实现随机圆与矩形功能
2020/10/29 Javascript
Python结合ImageMagick实现多张图片合并为一个pdf文件的方法
2018/04/24 Python
Python使用Socket实现简单聊天程序
2020/02/28 Python
Python descriptor(描述符)的实现
2020/11/15 Python
Python爬虫如何破解JS加密的Cookie
2020/11/19 Python
python 实现学生信息管理系统的示例
2020/11/28 Python
Fashion Eyewear美国:英国线上设计师眼镜和太阳镜的零售商
2016/08/15 全球购物
Waterford加拿大官方网站:世界著名的水晶杯品牌
2016/11/01 全球购物
BOSE德国官网:尽探索之力,享音乐之极
2016/12/11 全球购物
面向游戏玩家和书呆子的极客订阅盒:Loot Crate
2020/11/25 全球购物
Hibernate持久层技术
2013/12/16 面试题
实践单位评语
2014/04/26 职场文书
质量承诺书格式
2014/05/20 职场文书
2014法制宣传日活动总结
2014/07/09 职场文书
国土资源局开展党的群众路线教育实践活动整改措施
2014/09/26 职场文书
一文搞懂redux在react中的初步用法
2021/06/09 Javascript
手残删除python之后的补救方法
2021/06/26 Python
vue代码分块和懒加载非必要资源文件
2022/04/11 Vue.js
python在package下继续嵌套一个package
2022/04/14 Python
A22国内电台短波广播频率表
2022/05/10 无线电
Python+DeOldify实现老照片上色功能
2022/06/21 Python