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 相关文章推荐
!DOCTYPE声明对JavaScript的影响分析
Apr 12 Javascript
js 三级关联菜单效果实例
Aug 13 Javascript
jquery实现简单的banner轮播效果【实例】
Mar 30 Javascript
jQuery事件的绑定、触发、及监听方法简单说明
May 10 Javascript
jQuery zTree树插件简单使用教程
Jan 10 Javascript
用JavaScript和jQuery实现瀑布流
Mar 19 Javascript
vue实现文件上传功能
Aug 13 Javascript
微信小程序 调用远程接口 给全局数组赋值代码实例
Aug 13 Javascript
JS中的算法与数据结构之常见排序(Sort)算法详解
Aug 16 Javascript
JavaScript如何借用构造函数继承
Nov 06 Javascript
基于vue+uniapp直播项目实现uni-app仿抖音/陌陌直播室功能
Nov 12 Javascript
Vue页面切换和a链接的本质区别详解
Nov 12 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中将数组存到文件里的实现代码
2012/01/19 PHP
php使用mkdir创建多级目录入门例子
2014/05/10 PHP
php将csv文件导入到mysql数据库的方法
2014/12/24 PHP
PHP基于Closure类创建匿名函数的方法详解
2017/08/17 PHP
jQuery学习之prop和attr的区别示例介绍
2013/11/15 Javascript
javascript函数作用域学习示例(js作用域)
2014/01/13 Javascript
基于jQuery实现表单提交验证
2014/11/24 Javascript
详解JavaScript的回调函数
2015/11/20 Javascript
浅谈javascript的闭包
2017/01/23 Javascript
bootstrap suggest搜索建议插件使用详解
2017/03/25 Javascript
JS鼠标3次点击事件实现代码及扩展思路
2017/09/12 Javascript
vue 数组和对象不能直接赋值情况和解决方法(推荐)
2017/10/25 Javascript
Vue中的slot使用插槽分发内容的方法
2018/03/01 Javascript
webpack 开发和生产并行设置的方法
2018/11/08 Javascript
vue基于viewer实现的图片查看器功能
2019/04/12 Javascript
vuex的使用和简易实现
2021/01/07 Vue.js
[48:12]Secret vs Optic Supermajor 胜者组 BO3 第三场 6.4
2018/06/05 DOTA
python实现批量按比例缩放图片效果
2018/03/30 Python
在Python中字典根据多项规则排序的方法
2019/01/21 Python
Python定时任务随机时间执行的实现方法
2019/08/14 Python
Python整数与Numpy数据溢出问题解决
2019/09/11 Python
OpenCV中VideoCapture类的使用详解
2020/02/14 Python
Python操作Jira库常用方法解析
2020/04/10 Python
html5 浏览器支持 如何让所有的浏览器都支持HTML5标签样式
2012/12/07 HTML / CSS
Space NK英国站:英国热门美妆网站
2017/12/11 全球购物
日本索尼音乐商店:Sony Music Shop
2018/07/17 全球购物
西班牙家用电器和电子产品购物网站:Mi Electro
2019/02/25 全球购物
SAZAC的动物连体衣和动物睡衣:Kigurumi Shop
2020/03/14 全球购物
网上商城创业计划书范文
2014/01/31 职场文书
《狼和小羊》教学反思
2014/04/20 职场文书
教师党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
志愿者事迹材料
2014/12/26 职场文书
朋友圈早安励志语录!
2019/07/08 职场文书
vue响应式原理与双向数据的深入解析
2021/06/04 Vue.js
Win10 heic文件怎么打开 ? Win10 heic文件打开教程
2022/04/06 数码科技
i5-10400f处理相当于i7多少水平
2022/04/19 数码科技