angular 小试

2023-11-04

//测试token
var app = angular.module('myApp', ['ngRoute']);
//构造拦截器,添加token信息 3
app.config(function($httpProvider){
  //构造拦截器
  var intercepter=function($q,$rootScope,Auth){
    return{
      'response':function(resp){
        if(resp.config.url=='/login'){
          //假设API服务器返回的数据格式如下
          Auth.setToken(resp.data.token);
        }
        return resp;
      },
      'responseError':function(rejection){
        //错误处理
        switch(rejection.status){
          case 401:
            if(rejection.config.url!=='api/login')
            //如果当前不是在登陆页面
              $rootScope.$broadcast('auth:loginRequired'); break;
          case 403:
            $rootScope.$broadcast('auth:forbidden'); break;
          case 404:
            $rootScope.$broadcast('page:notFound'); break;
          case 500:
            $rootScope.$broadcast('server:error'); break;
        }
      }
    }//return
  };//intercepter
  $httpProvider.interceptors.push(intercepter);
});
app.config(function($routeProvider,ACCESS_LEVELS){
  $routeProvider.when('/', {templateUrl: 'HTTPBasic.html', reloadOnSearch: false});
  $routeProvider.when('/count', {templateUrl: 'count.html', reloadOnSearch: false});
  $routeProvider.otherwise({ redirectTo:'/'});
});
//定义页面访问权限1
app.constant('ACCESS_LEVELS',{
  pub:1,
  user:2
});

//构造拦截器服务2
app.factory('Auth',function($cookieStore,ACCESS_LEVELS){
    var _user=$cookieStore.get('user');
    var setUser=function(user){
      if(!user.role||user.role<0){
        user.role=ACCESS_LEVELS.pub;
      }
      _user=user;
      $cookieStore.put('user',_user);
    }
    return {
      isAuthorized:function(lvl){ //判断是否有权限
        return _user.role>=lvl;
      },
      setUser: setUser,
      isLoggedIn: function(){
        return _user?true: false;
      },
      getUser: function(){
        return _user;
      },
      getId: function(){
        return _user? _user._id:null;
      },
      getToken: function(){
        return _user? _user.token:'';
      },
      setToken: function(token){ //自己新加入
        _user._token=token;
      },
      logout:function(){
        $cookieStore.remove('user');
        _user=null;
      }
    };
});

//请求数据服务
app.service('Backend',function($http,$q,$rootScope,Auth){
  this.getDashboardData=function(){
    $http({
      method:'GET',
      url:'http://localhost:8080/bbwbg/userController/list',
      params:{ taken:Auth.getToken(),name:'fd'}
    }).success(function(data){
      return data.data;
    }).catch(function(reason){
      $q.reject(reason);
    });
  };
});
app.controller('MainController',function($scope,Backend){
  $scope.name="heha";
  Backend.getDashboardData();
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

angular 小试 的相关文章

随机推荐

  • c++读文件(一次全读/每行读/多次读)

    我以为这些都很容易在网上找到 谁知网上乱七八糟的东西太多 让我找了很久 开发环境为Windows VS2013 一次全读 std ifstream t path 读文件ifstream 写文件ofstream 可读可写fstream std
  • 开源IOT——一个最小的物联网系统设计方案及源码

    或许这个可以当成是你的毕业设计又或者你可以用它来控制你想控制的东西 总之你可以用它来做一个最小的物联网系统 不过 在这里可能没有那么复杂的功能 因为强调的是最小 BareMinimum 这也是为什么我没有改Arduino上面的工程名的原因
  • [附源码]计算机毕业设计校园疫情管理系统Springboot程序

    项目运行 环境配置 Jdk1 8 Tomcat7 0 Mysql HBuilderX Webstorm也行 Eclispe IntelliJ IDEA Eclispe MyEclispe Sts都支持 项目技术 SSM mybatis Ma
  • SpringMVC SpringBoot Get请求接收复杂参数

    前沿 对于复杂的接口请求 一般都用POST JSON数据的方式 后端用 RequestBody接收 但是对于某些有洁癖的人或者想严格遵循类Restful风格的人来讲 查询数据就是想用GET 怎么实现呢 Request Data public
  • can总线的示波器检测方法

    整理自网络 stm32的can总线是在APB1上的 stm32f10x的主频是72Mhz can外设时钟是36Mhz stm32f2xx的主频是120Mhz can外设时钟是30Mhz STM32 APB1和APB2区别 APB2负责AD
  • Linux统计某文件夹下文件、文件夹的个数

    http blog sina com cn s blog 464f6dba01012vwv html 统计某文件夹下文件的个数 ls l grep wc l 统计某文件夹下目录的个数 ls l grep wc l 统计文件夹下文件的个数 包
  • 瞧瞧,这样的「函数」才叫 Pythonic

    在机器学习中 我们经常需要使用类和函数定义模型的各个部分 例如定义读取数据的函数 预处理数据的函数 模型架构和训练过程的函数等等 那么什么样的函数才是漂亮的 赏心悦目的代码呢 本期教程 会从命名到代码量等六方面探讨如何养成美妙的函数 文末有
  • Python之序列

    序列是一种数据存储方式 用来存储一系列的数据 在内存中 序列就是一块用来存放多个值的连续空间 比如一个整数序列 10 20 30 40 可以这样表示 由于Python3中一切皆对象 在内存中实际是按照如下方式储存的 a 10 20 30 4
  • windows自带虚拟机无法正确安装软件 解决方案

    使用的虚拟机版本Ubuntu 20 04 4 LTS 错误描述 ruby DESKTOP LP8NQUK tmp test sudo apt install imagemagic 6 q16 sudo password for ruby R
  • Linux如何用ftp传输文件【ftp命令】

    Linux如何用ftp传输文件 ftp命令 Windows Linux 带端口的ftp命令 使用 FTP 下载文件 使用 FTP 上传文件 关闭FTP连接 Windows 在Windows系统中 可以用可视化的ftp来传输文件 或者下在文件
  • 第二章:25+ Python 数据操作教程(第八节如何从 PANDAS DATAFRAME 中删除一列或多列)

    在本教程中 我们将介绍如何从 pandas 数据框中删除或删除一个或多个列 是一个用于数据操作的 python 包 它具有以下数据任务的几个功能 目录 在 python 中删除一列 在 Python 中删除多列 如何从 pandas Dat
  • tp5 使用_initialize做验证时验证失败不能直接返回数据和打断程序运行

    在项目开发时写了一个基类 让其他控制器都继承这个类 当访问控制器时基类某些验证时 直接截断返回错误不执行控制器中的解决办法 失败写法 return json encode data 正确写法 echo json encode data ex
  • 利用XSS获取cookie

    如果web应用在用户输入的地方没有过滤特殊字符 比如 lt gt
  • MapReduce思想的学习

    这学期教hadoop 发现在备课MapReduce思想的时候 查阅资料基本上所有博客都没有真正讲出MapReduce的思想 而只是把它的计算过程讲出来 甚至有些说法还是误人子弟的 所以我就一直在想如何能把MapReduce的思想讲得通俗易懂
  • 大数据应用——zookeeper集群部署

    本地模式安装 安装前准备 1 安装 JDK 拷贝 apache zookeeper 3 5 7 bin tar gz 安装包到 Linux 系统下 解压到指定目录 hadoop hadoop101 software tar zxvf apa
  • 编译警告"struct declared inside parameter list"

    近来在阅读linux 2 6 37中cgroup的相关代码 读到include linux cgroup h的开头时犯了嘀咕 include
  • laravel基础学习笔记--Blade 模板

    laravel基础学习笔记 Blade 模板 Blade 视图文件都将被编译成原生的 PHP 代码并缓存起来 除非它被修改 否则不会重新编译 这就意味着 Blade 基本上不会给你的应用增加任何负担 Blade模板 section side
  • 2021华为杯数学建模B题“空气质量预报二次建模” 预处理思路+Python代码

    简介 前阵子和小伙伴做了2021年华为杯研赛的B题 空气质量预报二次建模 发现数据预处理一块挺有意思的 涵盖了常规的缺失值 随机缺失 指标缺失 列缺失 条目缺失 行缺失 异常值 偏离正态分布 非负数据为负 以及不常规的协同处理等 一直想着有
  • Ubuntu 16.04 手动用 apt-get 在线安装 Redis 5.0 最新版

    目录 安装 Redis 添加 Redis 源 开始安装 Redis 启动 Redis 常用基本命令 配置 Redis 密码 修改配置文件 设置 Redis 密码 测试 Redis 密码 Redis 全称 REmote DIctionary
  • angular 小试

    测试token var app angular module myApp ngRoute 构造拦截器 添加token信息 3 app config function httpProvider 构造拦截器 var intercepter fu