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 相关文章推荐
基于JQuery的动态删除Table表格的行和列的代码
May 12 Javascript
『JavaScript』限制Input只能输入数字实现思路及代码
Apr 22 Javascript
热点新闻滚动特效的js代码
Aug 17 Javascript
JavaScript控制各种浏览器全屏模式的方法、属性和事件介绍
Apr 03 Javascript
jquery实现的下拉和收缩效果示例
Aug 21 Javascript
JS中完美兼容各大浏览器的scrolltop方法
Apr 17 Javascript
体验jQuery和AngularJS的不同点及AngularJS的迷人之处
Feb 02 Javascript
JavaScript禁止用户多次提交的两种方法
Jul 24 Javascript
JavaScript编写一个简易购物车功能
Sep 17 Javascript
基于Bootstrap框架实现图片切换
Mar 10 Javascript
jQuery正则验证注册页面经典实例
Jun 10 jQuery
详解Vue.js项目API、Router配置拆分实践
Mar 16 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脚本的10个技巧(5)
2006/10/09 PHP
图片存储与浏览一例(Linux+Apache+PHP+MySQL)
2006/10/09 PHP
php 获取本机外网/公网IP的代码
2010/05/09 PHP
ThinkPHP3.1新特性之Action参数绑定
2014/06/19 PHP
Laravel中扩展Memcached缓存驱动实现使用阿里云OCS缓存
2015/02/10 PHP
IE下写xml文件的两种方式(fso/saveAs)
2013/08/05 Javascript
javascript一元操作符(递增、递减)使用示例
2013/08/07 Javascript
jquery限定文本框只能输入数字即整数和小数
2013/11/29 Javascript
jquery中JSON的解析方式
2015/03/16 Javascript
js+html5实现可在手机上玩的拼图游戏
2015/07/17 Javascript
jQuery简单实现input文本框内灰色提示文本效果的方法
2015/12/02 Javascript
JS+CSS实现闪烁字体效果代码
2016/04/05 Javascript
jQuery组件easyui基本布局实现代码
2016/08/25 Javascript
全选复选框JavaScript编写小结(附代码)
2017/08/16 Javascript
jQuery实现的简单获取索引功能示例
2018/06/04 jQuery
使用wxapp-img-loader自定义组件实现微信小程序图片预加载功能
2018/10/18 Javascript
js函数和this用法实例分析
2020/03/13 Javascript
jQuery实现简单全选框
2020/09/13 jQuery
vue基于Echarts的拖拽数据可视化功能实现
2020/12/04 Vue.js
python3使用urllib示例取googletranslate(谷歌翻译)
2014/01/23 Python
python 动态获取当前运行的类名和函数名的方法
2014/04/15 Python
Python中列表(list)操作方法汇总
2014/08/18 Python
Python机器学习算法库scikit-learn学习之决策树实现方法详解
2019/07/04 Python
django 消息框架 message使用详解
2019/07/22 Python
python内存监控工具memory_profiler和guppy的用法详解
2019/07/29 Python
Python 使用指定的网卡发送HTTP请求的实例
2019/08/21 Python
tensorflow之自定义神经网络层实例
2020/02/07 Python
python“静态”变量、实例变量与本地变量的声明示例
2020/11/13 Python
使用iframe+postMessage实现页面跨域通信的示例代码
2020/01/14 HTML / CSS
客户代表自我评价范例
2013/09/24 职场文书
《最大的“书”》教学反思
2014/02/14 职场文书
2015羊年春节慰问信
2015/02/14 职场文书
首次购房证明
2015/06/19 职场文书
Mybatis是这样防止sql注入的
2021/12/06 Java/Android
Python学习之迭代器详解
2022/04/01 Python
Python使用plt.boxplot()函数绘制箱图、常用方法以及含义详解
2022/08/14 Python