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,水平有待提高
Jan 31 Javascript
JS获取整个页面文档的实现代码
Dec 15 Javascript
分享一些常用的jQuery动画事件和动画函数
Nov 27 Javascript
js实现文字闪烁特效的方法
Dec 17 Javascript
Bootstrap路径导航与分页学习使用
Feb 08 Javascript
js实现不提示直接关闭网页窗口
Mar 30 Javascript
Node.js中环境变量process.env的一些事详解
Oct 26 Javascript
JavaScript程序设计高级算法之动态规划实例分析
Nov 24 Javascript
Javascript实现购物车功能的详细代码
May 08 Javascript
iview同时验证多个表单问题总结
Sep 29 Javascript
mpvue微信小程序开发之实现一个弹幕评论
Nov 24 Javascript
在VUE style中使用data中的变量的方法
Jun 19 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
yii实现级联下拉菜单的方法
2014/07/31 PHP
浅谈PHP中的数据传输CURL
2016/09/06 PHP
用js自动判断浏览器分辨率的代码
2007/01/28 Javascript
浏览器无法运行JAVA脚本的解决方法
2008/01/09 Javascript
jquery select选中的一个小问题
2009/10/11 Javascript
dreamweaver 8实现Jquery自动提示
2014/12/04 Javascript
iPhone手机上搭建nodejs服务器步骤方法
2015/07/06 NodeJs
关于react中组件通信的几种方式详解
2017/12/10 Javascript
vue 2.0 购物车小球抛物线的示例代码
2018/02/01 Javascript
使用mpvue搭建一个初始小程序及项目配置方法
2018/12/03 Javascript
vue-cli3使用 DllPlugin 实现预编译提升构建速度
2019/04/24 Javascript
elementUI table表格动态合并的示例代码
2019/05/15 Javascript
详解如何提升JSON.stringify()的性能
2019/06/12 Javascript
React Hooks 实现和由来以及解决的问题详解
2020/01/17 Javascript
JavaScript中数组去重的5种方法
2020/07/04 Javascript
vue项目实现多语言切换的思路
2020/09/17 Javascript
[01:23:45]DOTA2-DPC中国联赛 正赛 CDEC vs Dragon BO3 第一场 1月22日
2021/03/11 DOTA
python 用正则表达式筛选文本信息的实例
2018/06/05 Python
Python列表切片操作实例总结
2019/02/19 Python
python jenkins 打包构建代码的示例代码
2019/11/29 Python
Python批量处理csv并保存过程解析
2020/05/16 Python
Pytorch 使用CNN图像分类的实现
2020/06/16 Python
通过实例解析python创建进程常用方法
2020/06/19 Python
详解python变量与数据类型
2020/08/25 Python
英国马匹装备和马术用品购物网站:Equine Superstore
2019/03/03 全球购物
卫校毕业生自我鉴定
2013/10/31 职场文书
办公室驾驶员岗位职责
2013/11/15 职场文书
小学优秀班主任事迹材料
2014/05/17 职场文书
党的群众路线教育实践活动个人对照检查材料(医生)
2014/11/05 职场文书
幼儿园个人师德总结
2015/02/06 职场文书
酒店收银员岗位职责
2015/04/07 职场文书
行政复议答复书
2015/07/01 职场文书
男方家长婚礼答谢词
2015/09/29 职场文书
公务员廉洁从政心得体会
2016/01/19 职场文书
学习型家庭事迹材料(2016精选版)
2016/02/29 职场文书
导游词之介休绵山
2019/12/31 职场文书