ホームページ > ウェブフロントエンド > jsチュートリアル > vue vuex vue-rouert パーミッションルーティング例の詳細説明

vue vuex vue-rouert パーミッションルーティング例の詳細説明

小云云
リリース: 2017-12-29 16:51:28
オリジナル
2241 人が閲覧しました

この記事では主に vue vuex vue-rouert バックエンド プロジェクト - パーミッション ルーティングについて説明します。このバージョンは非常にシンプルで、必要とする初心者に適しています。参考にしていただければ幸いです。

プロジェクトのアドレス: vue-simple-template

役割は全部で 3 つあります: adan barbara carrie パスワードはすべて: 123456

adan は最高の権限 A を持っています。彼は赤、黄、青のページ (3 つ) を見ることができます。合計ページ)

バーバラには許可 B があり、赤と黄色のページが表示されます

キャリーには許可 C があり、赤と青のページが表示されます

テクノロジースタック


rreee

プロジェクトの初期化


webpack ---- 打包神器
vue ---- JavaScript 框架
vuex ---- 实现不同组件间的状态共享
vue-router ---- 页面路由
babel-polyfill ---- 将ES6代码转为ES5代码
normalize.css ---- 重置掉该重置的样式
element-ui ---- UI组件库
ログイン後にコピー

プロジェクトの構造

vue-cil プロジェクトを初期化した後、srcフォルダーのみを変更しました


# cd 到项目文件夹
cd weven-simple-template
# 安装依赖 (本项目还安装了其他依赖详情 请见 package.json 文件)
npm install
# 运行项目
npm run dev
ログイン後にコピー

キーポイント:

動的ルーティングの鍵はルーターの設定です メタフィールドとvuexのステータスが共存します (分からない場合は、まず公式ドキュメントを確認してください)

router/index.js


src
├── App.vue  ---- 页面入口
├── api  ---- api请求
│ └── login.js ---- 模拟json对象数据
├── assets  ---- 主题 字体等静态资源
│ └── logo.png
├── components ---- 组件
│ ├── index.vue
│ └── login.vue 
├── main.js  ---- 初始化组件 加载路由
├── router  ---- 路由
│ └── index.js
└── store  ---- vuex状态管理
 ├── getters.js
 ├── index.js
 └── modules
 └── login.js
ログイン後にコピー

store/modules/ lo


// 初始化路由
export default new Router({ 
 routes: [
 {
 path: '/login',
 name: 'Login',
 component: Login
 }
 ] 
});
// 动态路由 meta 定义了role
export const powerRouter =[ 
 { path: '/',redirect:'/red', name: 'index',component: Index,hidden:false,
 children: [
 { path: '/red', name: 'red', component: red,},
 { path: '/yellow', name: 'yellow', component: yellow, meta: {role: 'B'}},
 { path: '/blue', name: 'blue', component: blue, meta: {role: 'C'}}
 ]
 }
];
ログイン後にコピー

gin.jsのアクションセクション


Logins({ commit }, info){
  return new Promise((resolve, reject) => {
  let data={};
  loginByUserInfo.map(function (item) { //获取所以用户信息
   if(info.username === item.username || info.pew === item.pew){
   commit('SET_USERNAME',item.username); //将username和role进行存储
   sessionStorage.setItem('USERNAME', item.username); //存入 session 
   commit('SET_ROLE',item.role);
   sessionStorage.setItem('ROLE', item.role);
   return data={username:item.username,introduce:item.introduce};
   }else{
   return data;
   }
  }); 
  resolve(data);
 }).catch(error => {
  reject(error);
 });
 },
 Roles({ commit }, newrouter){
 return new Promise((resolve, reject) => {
  commit('SET_NEWROUER',newrouter); //存储最新路由
  resolve(newrouter);
 }).catch(error => {
  reject(error);
 });
 },
ログイン後にコピー
ログイン後にコピー

main.js


Logins({ commit }, info){
  return new Promise((resolve, reject) => {
  let data={};
  loginByUserInfo.map(function (item) { //获取所以用户信息
   if(info.username === item.username || info.pew === item.pew){
   commit('SET_USERNAME',item.username); //将username和role进行存储
   sessionStorage.setItem('USERNAME', item.username); //存入 session 
   commit('SET_ROLE',item.role);
   sessionStorage.setItem('ROLE', item.role);
   return data={username:item.username,introduce:item.introduce};
   }else{
   return data;
   }
  }); 
  resolve(data);
 }).catch(error => {
  reject(error);
 });
 },
 Roles({ commit }, newrouter){
 return new Promise((resolve, reject) => {
  commit('SET_NEWROUER',newrouter); //存储最新路由
  resolve(newrouter);
 }).catch(error => {
  reject(error);
 });
 },
ログイン後にコピー
ログイン後にコピー

components/index.vue


router.beforeEach((to, from, next) => {
 if(store.getters.role){ //判断role 是否存在
 
 if(store.getters.newrouter.length !== 0){ 
  next() //resolve 钩子
 }else{
  let newrouter
  if (store.getters.role == 'A') { //判断权限
  newrouter = powerRouter
  } else {
  let newchildren = powerRouter[0].children.filter(route => {
   if(route.meta){
   if(route.meta.role == store.getters.role){
    return true
   }
   return false
   }else{
   return true
   }
  });
  newrouter = powerRouter
  newrouter[0].children = newchildren
  }
  router.addRoutes(newrouter) //添加动态路由
  store.dispatch('Roles',newrouter).then(res => { 
  next({ ...to })
  }).catch(() => { 

  })
 } 
 }else{
  if (['/login'].indexOf(to.path) !== -1) { 
  next()
 } else {
  next('/login')
 }
 }
})
ログイン後にコピー

このプロジェクトを使用して問題ありません~の間の関係を明らかにするvue+vuex+vue-router 初心者向けの超簡易版と言えます。上記のコンテンツで言及されている重要なポイントは、実際にはプロジェクト全体です

プロジェクト アドレス: vue-simple-template

関連する推奨事項:

vue routing ネスティングの SPA 実装手順の詳細な説明

サンプルの詳細な説明vueフッキングのルートをヘッドナビゲーションにロードします

vueでのルート検証と対応するインターセプトの使用方法の詳細な説明

以上がvue vuex vue-rouert パーミッションルーティング例の詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート