道具:簡単にデバッグできるように、Chrome ブラウザに Vue.js 開発ツールをインストールします。 ログインシナリオ:ユーザーの現在のログイン状態は、ページナビゲーションやその他の場所に表示されることがあります。状態は、ログインしていない、ログイン中(読み込み中)、正常にログインした、ユーザー名の表示に分けられます。 一部のページはユーザーがログインせずに閲覧できますが、一部のページは閲覧する前にログインする必要があります。 練習する:シナリオ1: 思考と実践vuex でデータストアを作成する // src ディレクトリの下に新しい store ディレクトリを作成し、次のように index.js を作成します // データ ウェアハウスを作成します import Vuex from 'vuex'; 'vue' から vue をインポートします。 'loginUser.js' から loginUser をインポートします。 Vue.use(Vuex) 定数ストア = 新しい Vuex.Store({ modules: { //モジュールは別のオブジェクト loginUser に異なる状態を置くことができます //ログインしているかどうか}, strict: true, // ミューテーションによる状態の変更のみを許可する }); ログインステータスの読み込みと現在ログインしているユーザーを設定します // loginUser.js を作成し、その状態/ミューテーション/アクションを作成する //維持する必要がある状態 state: { loading: false, //ログイン状態 user: null, //現在ログインしているユーザー}, //計算プロパティのゲッター: { ステータス(状態) { if (状態.読み込み) { '読み込み中' を返す } それ以外の場合 (state.user) { 「ログイン」を返す } それ以外 { 'unLogin' を返す } } }, // 読み込みとユーザーステータスの変更: { //読み込みを設定する setLoading(状態、メッセージ) { state.loading = メッセージ }, //ユーザーを設定する setUser(state, msg) { 状態.ユーザー = メッセージ } }, //変更されたステータスをアクションで送信します。actions: { //ログインメソッドctxはstoreと同等です 非同期ログイン(ctx, msg) { //ログインステータスをtrueに設定する ctx.commit("setLoading", true) const 結果 = xxxapi.login(msg.loginId, msg.loginPassword) を待機します if (結果) { //ログイン成功 ctx.commit('setUser', result) //ログインが成功すると、ログインステータスはfalseに設定されます ctx.commit('setLoading', false) } //ログインが成功したかどうかを返す結果を返す }, //ログインしたかどうかを判定する async isLogin(ctx) { //ログイン ctx.commit('setLoading', true) // インターフェイスを呼び出して、ログインされているかどうかを確認します。const result = await xxxapi.isLogin(); ctx.commit('setUser', 結果); ctx.commit('setLoading', false) }, //ログアウト async logout(ctx) { ctx.commit('setLoading', false) xxxapi.logout() を待機します。 ctx.commit('setUser', null); ctx.commit('setLoading', false) } }, ページの使用法: ログインするとログインボタンがあり、Vuexウェアハウスでボタンのステータスを取得できます。 <button :disabled="loading">{{ loading ? 'loading...' : 'ログイン' }} </ボタン> 計算: { // 読み込みを計算済みにカプセル化します。これにより、呼び出すたびに this.$store.state.loginUser と記述する必要がなくなります。// loading() { // this.$store.state.loginUser.loading を返します。 // } // 最適化 // 補助関数 // import {mapState} from "vuex" ...mapState({ 読み込み中: (状態) => state.loginUser.loading }) } ボタンをクリックしたときに送信するときにアクションをディスパッチする 非同期ハンドル送信() { const result = this.$store.dispatch("loginUser/login", { を待機します。 ログインID: this.loginId、 ログインパスワード: this.loginPassword }); if (結果) { // ログイン成功ルートジャンプ const path = this.$route.query.url || '/' this.$router.push(パス) } }, ページナビゲーションでログイン状態を切り替える [読み込み/ログイン/ログイン解除] <!-- ページのログイン ステータスを表示 --> <span v-if="status === 'loading'">ログイン中です。お待ちください...</span> <テンプレート v-else-if="ステータス === 'ログイン'"> <span>現在ログインしているユーザー {{user.name}}</span> <span @click="handleLogout">ログアウト</span> </テンプレート> <router-link to="/login" v-else> ログイン</router-link> 計算: { ...mapGetters("ログインユーザー", ["ステータス"]), ...mapState("ログインユーザー", ["ユーザー"]), } ログアウト時にステータスを変更する 非同期ハンドルログアウト(){ これを待ちます。$store.dispatch("loginUser/logout") //ログインページにジャンプします this.$route.push(/xxx) }, ページが更新されるたびにログイン ステータスを確認する必要があり、これは vue が作成される main.js で決定する必要があります。 store.dispatch('loginUser/isLogin') シナリオ2: 思考と実践バックグラウンドプロジェクトの権限設定を参照してください 全体的なデザイン: ページを更新した後、まずはVuexウェアハウスでログイン状態を確認します –> ナビゲーションガード(router.beforeEach)は、metaに設定されたパラメータを判断して、このページがログインされているかどうかを検出します。 --> ページのレンダリングを表示するにはログインする必要があります。 全体的なロジック: 1. ページに入るときに、このページを閲覧するためにログインが必要かどうかを確認します。 2. ログインステータスを確認します。次の 3 つの状態があります。
練習する: ルーターにメタを設定します。auth が true の場合、アクセスするにはログインする必要があります。 //routes.js の "./xx/xx.vue" から Home をインポートします エクスポートデフォルト[ { パス:"/home", コンポーネント:ホーム、 メタ: { auth: true, //アクセス権限が必要なページ} } ] index.js でルートガードを設定する router.beforeEach((to, from, next) => { (to.meta.auth)の場合{ // アクセスするにはログイン権限が必要です const result = store.getters["loginUser/status"] if (結果 === 'ロード中') { // 読み込み状態。ログインしているかどうかはわかりません // ログイン中のページにジャンプし、そのページでログインが成功したかどうかを監視します。そうでない場合は、永遠にここに留まります // ルートがジャンプするときは、以前どこから来たのかを記録する必要があります。そうしないと、次にどのページにジャンプするかわかりません({ path: '/loading', //[ログイン]ページへ移動 query: { url: to.fullpath } }) } そうでない場合 (結果 === 'ログイン') { // ログイン成功next(); } それ以外 { // ログインしていません this.$message.info('ログインする必要があります'); 次({ パス: '/login', //[ログイン]ページに移動します。クエリ: { url: to.fullpath } }) } } それ以外 { //ログイン権限なしでアクセスできるページ next() } }) ログインページで現在のステータスを監視する 作成された() { this.unWatch = this.$watch(() => this.$store.getters["loginUser/status"], (status) => { console.log('現在のステータス', ステータス); if (ステータス !== 'ロード中'){ this.$router.push(this.$route.query.url || '/home').catch(() => {} } }, { 即時: 真 }) }, 破壊された() { //監視をキャンセル this.unWatch() } 要約するこれで、vuex プロジェクトでのログイン ステータス管理に関するこの記事は終了です。vuex ログイン ステータス管理に関するより関連性の高いコンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: MySQL インデックスの長所と短所、およびインデックス作成のガイドライン
>>: DockerHubイメージリポジトリの使い方の詳しい説明
序文Dockerfile は Docker プログラムによって解釈されるスクリプトです。Docker...
原文記事、転載の際は著者と出典を明記してください! Web デザインは間違いなくテクノロジーであり、...
この記事では、すべてのチェックボックスを選択または解除するためのJavaScriptの具体的なコード...
翻訳Kool Desktop Environment の略称。 Linux、Unix、FreeBSD...
目次これ方法オブジェクト内これを隠した厳密モード要約するJavaScript の this も不思議...
多くの場合、ローカル データベースのデータをエクスポートしたり、他のデータベースからデータをインポー...
必要: docker を使用して nginx + tomcat デュアル プロセスを起動します。実際...
序文MySQL データベースを使用する過程では、データベースのバックアップと復元が必要になることがよ...
1. フロントエンドエンジニアリングの複雑さいくつかの小さなデモ プログラムを開発するだけであれば、...
目次1 つの Redis 設定ファイル2 Dockerコマンドの開始3 docker-compose...
数日前、Google Reader で Yu Bo さんが共有した投稿「空のパスがページのパフォーマ...
私は頻繁にシステムをインストールするので、インストールのたびにいくつかのソフトウェアを再インストール...
目次リストレンダリングキーの原理と機能主要原則の分析キーの役割要約するリストレンダリングキーの原理と...
<br />かつて、仏印と東坡氏が仏教について雑談していたとき、東坡氏が突然こう言った。...
目次1. 概要1.1 Functionコンストラクタを使用して関数を作成する1.2 機能と目的2. ...