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框架
Aug 13 Javascript
Javascript计算时间差的函数分享
Jul 04 Javascript
js关闭子窗体刷新父窗体实现方法
Dec 04 Javascript
jQuery Mobile页面跳转后未加载外部JS原因分析及解决
Mar 18 Javascript
浏览器打开层自动缓慢展开收缩实例代码
Jul 04 Javascript
教你如何使用firebug调试功能了解javascript闭包和this
Mar 04 Javascript
jQuery和JavaScript节点插入元素的方法对比
Nov 18 Javascript
JavaScript实现打地鼠小游戏
Apr 23 Javascript
12个非常有用的JavaScript技巧
May 17 Javascript
微信小程序实现搜索历史功能
Mar 26 Javascript
jQuery实现动态加载(按需加载)javascript文件的方法分析
May 31 jQuery
JSONP 的原理、理解 与 实例分析
May 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对MongoDB[NoSQL]数据库的操作
2013/03/01 PHP
PHP大转盘中奖概率算法实例
2014/10/21 PHP
详解PHP对象的串行化与反串行化
2016/01/24 PHP
jWiard 基于JQuery的强大的向导控件介绍
2011/10/28 Javascript
JS实现点击图片在当前页面放大并可关闭的漂亮效果
2013/10/18 Javascript
什么是 AngularJS?AngularJS简介
2014/12/06 Javascript
全面了解javascript中的错误处理机制
2016/07/18 Javascript
jQuery之动画ajax事件(实例讲解)
2017/07/18 jQuery
Vue-router结合transition实现app前进后退动画切换效果的实例
2017/10/11 Javascript
微信小程序实现单选选项卡切换效果
2020/06/19 Javascript
Vue项目从webpack3.x升级webpack4不完全指南
2019/04/28 Javascript
使用vue-cli3 创建vue项目并配置VS Code 自动代码格式化 vue语法高亮问题
2019/05/14 Javascript
解决layer.open弹出框不能获取input框的值为空的问题
2019/09/10 Javascript
[02:38]DOTA2 夜魇暗潮2020活动介绍官方视频
2020/11/04 DOTA
连接Python程序与MySQL的教程
2015/04/29 Python
浅谈用VSCode写python的正确姿势
2017/12/16 Python
详解Python 数据库的Connection、Cursor两大对象
2018/06/25 Python
python之django母板页面的使用
2018/07/03 Python
Python爬取知乎图片代码实现解析
2019/09/17 Python
使用python创建生成动态链接库dll的方法
2020/05/09 Python
Canvas实现保存图片到本地的示例代码
2018/06/28 HTML / CSS
埃弗顿足球俱乐部官方网上商店:Everton Direct
2018/01/13 全球购物
斯凯奇新西兰官网:SKECHERS新西兰
2018/02/22 全球购物
俄罗斯童装网上商店:BebaKids
2020/06/06 全球购物
大学生职业生涯规划书前言
2014/01/09 职场文书
股份转让协议书
2014/04/12 职场文书
《猴子种果树》教学反思
2014/04/26 职场文书
毕业生实习期转正自我鉴定
2014/09/26 职场文书
材料员岗位职责范本
2015/04/11 职场文书
上诉状格式
2015/05/23 职场文书
高中运动会广播稿
2015/08/19 职场文书
教师听课学习心得体会
2016/01/15 职场文书
中学教代会开幕词
2016/03/04 职场文书
golang 实现时间戳和时间的转化
2021/05/07 Golang
python 中的jieba分词库
2021/11/23 Python
kubernetes集群搭建Zabbix监控平台的详细过程
2022/07/07 Servers