1. 程式人生 > >Angular基於路由許可權限制元件間跳轉

Angular基於路由許可權限制元件間跳轉

Angular中利用canActive(路由守衛功能)限制路由跳轉

使用angular作為前端框架時,通過路由實現元件之間跳轉,很多時候都需要對元件的訪問作許可權攔截。比如某些頁面(元件)登入後才能訪問,某些頁面需要特殊許可權(角色)才能訪問。我們後臺需要根據使用者身份進行資料攔截,Angular也需要對路由跳轉進行攔截。下面我用一個攔截登入的例子簡單介紹一下該功能。

1.建立一個自己的服務元件用於驗證使用者是否登入

// src/app/user/login-auth.service.ts
import { Injectable } from '@angular/core';
import
{ Http,Headers,RequestOptions } from '@angular/http'; @Injectable() export class LoginAuthService { private headers = new Headers({'Content-Type': 'application/json;'}); private options = new RequestOptions({ headers: this.headers }); constructor(private http:Http ){ } // 是否登入 public isLogin
(): boolean { const token = localStorage.getItem('token'); // Check whether the token is expired and return // true or false return !this.isTokenExpired(token); } //利用http請求判斷使用者是否登入或token是否過期 private isTokenExpired(token:string):boolean{ ... this.http.get.... ... return
isTokenExpired } }

2.建立路由驗證服務,實現CanActivate介面

// src/app/user/auth.service.ts
import { Injectable } from '@angular/core';
import { Router, CanActivate } from '@angular/router';
import { LoginAuthService } from './login-auth.service';

@Injectable()
export class AuthService implements CanActivate {

  constructor(public router: Router,private loginAuth:LoginAuthService) {}

  canActivate(): boolean {
      if(!this.loginAuth.isLogin()){
          this.router.navigate(['login']);
          return false;
      }
       return true;
  }

}

3.路由列表中對需要登入才能訪問的路徑下加上canActive

import { Routes } from '@angular/router';
import { AuthService } from './user/auth.service';

export const ROUTES: Routes = [
    ...
    {
        path: 'personal/:id',
        component: PersonalComponent,
        canActivate: [AuthService]
    },
    ...
]

4.最後別忘了在AppModule的providers加入服務元件


@NgModule({
  declarations: [
      PersonalComponent
   ],
  imports: [
    BrowserModule,
    FormsModule,
    ReactiveFormsModule,
    HttpClientModule,
    RouterModule.forRoot(ROUTES, { preloadingStrategy: PreloadAllModules })
  ],
  providers: [AuthService,LoginAuthService],
  bootstrap: [AppComponent]
})
export class AppModule { }

這只是一個簡單登入攔截例子,如果有複雜的角色身份認證,使用這個方式都一樣可以實現。無非定義不同的驗證服務,根據當前使用者身份進行匹配。
如果還想詳細瞭解路由守衛功能,可通過官網詳細瞭解,連結如下:
https://angular.cn/guide/router#milestone-5-route-guards

相關推薦

Angular基於路由許可權限制元件

Angular中利用canActive(路由守衛功能)限制路由跳轉 使用angular作為前端框架時,通過路由實現元件之間跳轉,很多時候都需要對元件的訪問作許可權攔截。比如某些頁面(元件)登入後才能訪問,某些頁面需要特殊許可權(角色)才能訪問。我們後

vue 路由許可權限制

function routerXmlFlag (menu, to) { for (let i = 0; i < menu.length; i++) { if (menu[i].url === to.fullPath) { return true } if

spring mvc controller 重定向 傳參

ron nan rep else 必須 轉發 lis 代碼 control spring mvc controller間跳轉 重定向 傳參 1. 需求背景 需求:spring MVC框架controller間跳轉,需重定向。有幾種情況:不帶參數跳轉,帶參數拼接ur

微信小程序小結(4) -- 分包加載及小程序

項目 devel 目前 圖片 ria 首頁 .com logs path 分包加載 某些情況下,開發者需要將小程序劃分成不同的子包,在構建時打包成不同的分包,用戶在使用時按需進行加載(主要是空間不夠用,哈哈~)。 在構建小程序分包項目時,構建會輸出一個或多個功能的分包,其中

Wpf Page傳引數 And Window To Page

  這段時間用到Wpf,頁面間的跳轉網上有不少的示例,但是有些已經不能用了,尤其是頁面間的傳參問題更是一大堆,但正確的解決方案卻沒有幾個,或者說寫的不清楚,讓人走了很多彎路,檢視官方文件後發現了正確的姿勢,現記錄如下 Page頁間的跳轉      private void Button_Click(

小程式最新功能調整

以下選自微信小程式官方文件調整說明: 調整具體措施如下: 1、需要使用者觸發跳轉 即日起,若使用者未點選小程式頁面任意位置,則開發者將無法呼叫 wx.navigateToMiniProgram 介面自動跳轉至其他小程式。 2、需要使用者確認跳轉 在跳轉至其他小

spring MVC框架controller失效問題

info control 代碼 img nbsp ont response 返回 生效 今天調試時,發現redirect:url 不生效,訪問直接返回這串字符串。忘了找了兩個來小時,才找到正確的原因。 原來是因為我代碼開始用的是@RestController, 用了這個後,

SpringMVC controller重定向傳參

1. 需求背景     需求:spring MVC框架controller間跳轉,需重定向。有幾種情況:不帶引數跳轉,帶引數拼接url形式跳轉,帶引數不拼接引數跳轉,頁面也能顯示。 2. 解決辦法     需求有了肯定是解決辦法了,一一解決,說明下

android實現檢測app是否有通知許可權,沒有就去設定,設定成功返回時並測試發出一條通知訊息

1.判斷是否有通知許可權 2.沒有的話,彈出一個對話方塊,提示使用者是否去設定,使用者點選確定後跳轉到設定頁面 3.手動設定許可權成功後,結果會返回到 onActivityResult方法中,其中返回的請求碼等於傳入的碼時,並且結果碼等於2,編輯正確設定了,此時就可以呼

vue 解決addRoutes動態新增路由後重新整理失效問題(“404”頁面)

這篇文章主要介紹了vue 解決addRoutes動態新增路由後重新整理失效問題,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧 前言 某些場景下我們需要利用addRoutes動態新增路由,但是重新整理後就會失效,前段時間專案裡剛好遇到了這個應用場景,所以就花時間研究了一下,做下

React利用路由實現登入介面的

React利用路由實現登入介面的跳轉 上一篇在配置好了webpack和react的環境後,接下來開始寫登入介面,以及接下來的跳轉到主頁的功能。 **1、首先看一下總體的目錄結構。**因為很多時候在看別人寫的例子的時候因為目錄結構不熟悉後邊會出現意想不到的岔子。 。 2、大體流程: 1)we

jsp頁面,獲取上一頁面表單內的值

筆記 一、在頁面間傳遞資料時的方法: 切記text框的name屬性,只有設定name屬性,下一個頁面的request才可以獲取資料.id屬性不行,因為id屬性主要是為了JavaScript操作 1. 通過<a href="judge.jsp?name=<%=us

vue踩坑筆記03---路由的作用,頁面

vue踩坑筆記03---路由的作用,頁面跳轉 無引數跳轉: 使用路由標籤跳轉: 通過路由路徑跳轉: 通過路由名稱跳轉: 使用使用methods跳轉: 有引數跳轉: 使用路由標籤

Android 兩個APP

通過intent實現不同APP間跳轉 通過了解APP間的跳轉,加深對於intent的理解 首先需要APP1和APP2,然後在APP1中activity中新增一個點選事件,希望跳轉到APP2的activity中。 APP1跳轉程式碼: Intent intent

React-Native學習筆記之:導航器Navigator實現頁面

Navigator用來實現不同頁面的切換,想設定Navigator,必須確定一個或多個呼叫routes物件,去定義每個場景。 還可以利用renderScene方法,導航欄可以根據指定的路由來渲染場景。

AngularJS通過路由模組ui-sref指令頁面傳參方式

路由router.js 'use strict'; angular.module('app').config(['$stateProvider', '$urlRouterProvider', f

React學習(3)——Router路由的使用和頁面

React-Router的中文文件可以參照如下連結:         http://react-guide.github.io/react-router-cn/docs/Introduction.html  &nbs

Android路由機制下Tab頁解決方案

        使用過路由框架的人應該知道,使用url的形式進行頁面跳轉是一種很不錯的方式。在不需要import對應頁面引用的情況下,通過url可以開啟頁面,並且可以進行傳遞引數,設定flag等等操作。但是當一個頁面中有viewpager+fragment或者fragmela

iOS多個storyboard

Stroyboard 可以被看作一個管理View畫面的集合。也就是說一個iOS專案裡面並沒有限制只能有一個Storyboard。 所以在你的APP專案中,你可以把功能相近的View放到同一個APP之中,形成一個群組,方便功能上的管理。 1.在專案中準備2個Storyboard 在一個IOS的專案裡面建立兩個

Android應用獲取通知欄許可權是否開啟--以及到系統設定介面--解決方案

因為專案用到推送功能,所以需求是知道使用者是否開啟了通知欄的許可權,並且提供滑動按鈕進行跳轉以便使用者進行關閉或者開啟。 1.獲取通知欄許可權是否開啟: /** * 獲取通知欄許可權是否開啟 * */ public class Notifica