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 相关文章推荐
静态的动态续篇之来点XML
Dec 23 Javascript
JavaScript中的作用域链和闭包
Jun 30 Javascript
详解JavaScript函数绑定
Aug 18 Javascript
将list转换为json失败的原因
Dec 17 Javascript
JavaScript结合AJAX_stream实现流式显示
Jan 08 Javascript
javascript实现在网页中运行本地程序的方法
Feb 03 Javascript
用jQuery获取table中行id和td值的实现代码
May 19 Javascript
Angularjs实现分页和分页算法的示例代码
Dec 23 Javascript
JS获取子、父、兄节点方法小结
Aug 14 Javascript
深入理解Vuex 模块化(module)
Sep 26 Javascript
angular4笔记系列之内置指令小结
Nov 09 Javascript
前端实现滑动按钮AJAX与后端交互的示例代码
Feb 24 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 字符转义 注意事项
2009/05/27 PHP
Windows2003下php5.4安装配置教程(IIS)
2016/06/30 PHP
php 如何禁用eval() 函数实例详解
2016/12/01 PHP
详解PHP5.6.30与Apache2.4.x配置
2017/06/02 PHP
FCK调用方法..
2006/12/21 Javascript
如何用js控制css中的float的代码
2007/08/16 Javascript
[原创]js获取数组任意个不重复的随机数组元素
2010/03/15 Javascript
Javascript 去除数组的重复元素
2010/05/04 Javascript
Js中获取frames中的元素示例代码
2013/07/30 Javascript
JavaScript设计模式之单例模式实例
2014/09/24 Javascript
Javascript验证Visa和MasterCard信用卡号的方法
2015/07/27 Javascript
javascript中使用未定义变量或值的情况分析
2016/07/19 Javascript
微信小程序  modal详解及实例代码
2016/11/09 Javascript
Angular2使用Augury来调试Angular2程序
2017/05/21 Javascript
AngularJS实现表单验证功能详解
2017/10/12 Javascript
详解如何用模块化的方式写vuejs
2017/12/16 Javascript
代码详解JS操作剪贴板
2018/02/11 Javascript
echarts实现词云自定义形状的示例代码
2019/02/20 Javascript
vue基础之模板和过滤器用法实例分析
2019/03/12 Javascript
eslint 的三大通用规则详解
2019/05/16 Javascript
Python运算符重载用法实例分析
2015/06/01 Python
python实现远程通过网络邮件控制计算机重启或关机
2018/02/22 Python
python生成任意频率正弦波方式
2020/02/25 Python
浅谈python 类方法/静态方法
2020/09/18 Python
Pytorch实验常用代码段汇总
2020/11/19 Python
前端H5 Video常见使用场景简介
2020/08/21 HTML / CSS
Crocs卡骆驰洞洞鞋日本官方网站:Crocs日本
2016/08/25 全球购物
Algenist奥杰尼官网:微藻抗衰老护肤品牌
2017/07/15 全球购物
欧洲第一中国智能手机和平板电脑网上商店:CECT-SHOP
2018/01/08 全球购物
Vichy薇姿加拿大官网:法国药妆,全球专业敏感肌护肤领先品牌
2018/07/11 全球购物
Bluebella德国官网:英国性感内衣和睡衣品牌
2019/11/08 全球购物
搞笑欢迎词大全
2015/09/30 职场文书
《西门豹》教学反思
2016/02/23 职场文书
golang 实现菜单树的生成方式
2021/04/28 Golang
Anaconda安装pytorch及配置PyCharm 2021环境
2021/06/04 Python
自从在 IDEA 中用了热部署神器 JRebel 之后,开发效率提升了 10(真棒)
2021/06/26 Java/Android