ホームページ ウェブフロントエンド jsチュートリアル vue ルーターはすべてのサブルートを独立したコンポーネントに分離します

vue ルーターはすべてのサブルートを独立したコンポーネントに分離します

Apr 27, 2018 am 09:26 AM
router 分離 独立した

今回は、すべてのサブルートを独立したコンポーネントに分離するための vue ルーターについて説明します。vue ルーターがすべてのサブルートを独立したコンポーネントに分離するための 注意事項は何ですか。以下は実際的なケースです。

vue-routerの動的ルーティング

vue-router官网上面是这样说的
// 带查询参数,变成 /register?plan=private
router.push({ path: 'register', query: { plan: 'private' }})
然后,我就这样写了:
this.$router.push({path:'manage', query: {id: 'tasklist'}})1
结果很明显,失败了。然后我就默默的再次看了一下官网,结果发现了这句话
// 命名的路由
router.push({ name: 'user', params: { userId: 123 }})
// 带查询参数,变成 /register?plan=private
router.push({ path: 'register', params: { plan: 'private' }})
注意:如果提供了 path,params 会被忽略,上述例子中的 query 并不属于这种情况。取而代之的是下面例子的做法,你需要提供路由的 name 或手写完整的带有参数的 path:
const userId = 123
router.push({ name: 'user', params: { userId }}) // -> /user/123
router.push({ path: `/user/${userId}` }) // -> /user/123
// 这里的 params 不生效
router.push({ path: '/user', params: { userId }}) // -> /user
谨记啊,动态实现二级路由,需要先用变量保存二级路由名称(let router = 'tasklist'),然后调用this.$router.push({path: `/user/${router}`}).
ログイン後にコピー

vue routerの動的ルーティングの下で​​各サブルートを独立したコンポーネントにする解決策を見てみましょう

vue-routerはネストされたルーティング戦略にコンポーネントの再利用を使用しているため、これはこれは確かにほとんどのシナリオで効率的なアプローチですが、次のような状況に遭遇した場合:

には複数のサブルートが共存する必要があり、頻繁に切り替える必要があるため、それぞれのサブルートを切り替えることが非常に望まれます。 sub-router can これらはすべて独立したコンポーネントです。リッスン ルートを切り替えることで、更新されたデータをリアルタイムで処理できます

watch: {
   '$route'(to) {
    if (to.meta.path === '/page/buy-details') {
     this.id = to.params.id;
     this.state()
    }
   }
  },
ログイン後にコピー
。これは、上記のアニメーション ページも含めて、以前から実行していましたが、これは非常に面倒で、ユーザーが必要です。切り替え前のページの表示状態に正確に戻すには考慮すべきことが多すぎるため、解決策を考え出しました。

サブルーティング コンポーネントには実際のビジネス コードは含まれず、次のリストを維持するだけです。オープンされた ID、ルーティングの切り替え ここに到達したら、ID を決定し、オープンされていないものを追加し、このリストを通じて実際のサブルーティング コンポーネントをループアウトし、各インスタンスが独立できるように現在の ID を表示します

この考えに従って書きます。 mixins

details-page.js

export default {
 watch: {
  '$route'(to, from) {
   this.detailsLeave(from);
   this.detailsOpen(to);
  }
 },
 data() {
  return {
   pagePath: '',
   pageId: 0,
   pages: {}
  }
 },
 methods: {
  /**
   * 子页面打开触发
   * @param route
   */
  detailsOpen(route) {
   if (this.detailsPathGet(route.path) === this.pagePath) {
    if (!this.pages[route.params.id]) {
     this.$set(this.pages, route.params.id, {
      id: route.params.id,
      scrollTop: 0
     })
    }
    //路由打开 跳转滚动条
    this.pageId = route.params.id;
    this.$nextTick(()=>{
     this.$parent.$el.firstChild.scrollTop = this.pages[route.params.id].scrollTop;
    });
   }
  },
  /**
   * 路由切换触发
   * 判断离开的路由是否是当前页面,如果是则记录滚动条高度
   * @param route
   */
  detailsLeave(route) {
   if (this.detailsPathGet(route.path) === this.pagePath) {
    if (this.pages[route.params.id]) {
     //记录滚动条高度 此处针对ea-admin后台 不同的框架要记录的滚动条el不同
     this.pages[route.params.id].scrollTop = this.$parent.$el.firstChild.scrollTop ;
    }
   }
  },
  /**
   * 子页面关闭函数
   * @param id
   */
  detailsClose(id) {
   delete this.pages[id]
  },
  /**
   * 取路由不含最后一项参数的地址
   * @param path
   * @returns {string}
   */
  detailsPathGet(path) {
   const i = path.lastIndexOf('/');
   return path.substr(0, i);
  }
 },
 mounted() {
  //通过当前路由地址创建页面识别地址 注:只对path: '/user/:id' 有效 当 path: /user/:id/profile 失效
  this.pagePath = this.detailsPathGet(this.$route.path);
  //执行第一次子页面打开
  this.detailsOpen(this.$route);
  //监听标签关闭消息 此处针对ea-admin后台 不同框架监听关闭方式不同
  this.$tabs.onRemove((page, next) => {
   //收到标签关闭回调,判断关闭的是否是当前页面
   if (page._path === this.pagePath) {
    //触发子页面删除
    this.detailsClose(page.id)
   }
   next()
  })
 }
}
ログイン後にコピー
Details.vue

<template>
 <p>
  <your-component
    v-for="item in pages"
    :id="item.id"
    :key="item.id"
    v-show="item.id === pageId">
  </your-component>
 </p>
</template>
<script>
 import YourComponent from '';
 import detailsPage from '../mixins/details-page'
 export default {
  name: 'DetailsPage',
  components: {YourComponent},
  mixins: [detailsPage],
 }
</script>
ログイン後にコピー
を作成します。 このように、サブコンポーネントは独自の固定データの処理のみに集中できます。 ID ごとにビューステートを保存することを心配する必要はありません。

この記事の事例を読んだ後は、この方法を習得したと思います。さらに興味深い情報については、php 中国語 Web サイトの他の関連記事に注目してください。

推奨読書:

WeChat ミニ プログラムの画像をデバイスの高さに合わせる方法

vue.js フロントエンドとバックエンドのデータ対話手順の詳細な説明

以上がvue ルーターはすべてのサブルートを独立したコンポーネントに分離しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

React Router ユーザーガイド: フロントエンドルーティング制御の実装方法 React Router ユーザーガイド: フロントエンドルーティング制御の実装方法 Sep 29, 2023 pm 05:45 PM

ReactRouter ユーザーガイド: フロントエンドルーティング制御の実装方法 シングルページアプリケーションの人気に伴い、フロントエンドルーティングは無視できない重要な部分になりました。 React エコシステムで最も人気のあるルーティング ライブラリとして、ReactRouter は豊富な機能と使いやすい API を提供し、フロントエンド ルーティングの実装を非常にシンプルかつ柔軟にします。この記事では、ReactRouter の使用方法と具体的なコード例を紹介します。 ReactRouter を最初にインストールするには、次のものが必要です

Java 9 のモジュール システムを使用してコードを分離および分離する方法 Java 9 のモジュール システムを使用してコードを分離および分離する方法 Jul 30, 2023 pm 07:46 PM

Java 9 のモジュール システムを使用してコードを分離および分離する方法 ソフトウェアの規模が拡大し続けるにつれて、コードの複雑さは増加し続けています。コードをより適切に編成および管理するために、Java9 ではモジュール システムが導入されました。モジュール システムの出現により、従来のパッケージの依存関係の問題が解決され、コードの分離と分離がより簡単かつ柔軟になりました。この記事では、Java 9 のモジュール システムを使用してコードの分離と分離を実現する方法を紹介します。 1. モジュールの定義 Java9 では module キーワードを使用してモジュールを定義できます。

Golang のフロントエンドとバックエンドの分離開発におけるフロントエンド技術の選択に関する提案。 Golang のフロントエンドとバックエンドの分離開発におけるフロントエンド技術の選択に関する提案。 Mar 05, 2024 pm 12:12 PM

タイトル: Golang のフロントエンドとバックエンドの分離開発におけるフロントエンド テクノロジの選択に関する提案 Web アプリケーションの複雑さと要求が増加し続けるにつれて、フロントエンドとバックエンドの分離開発モデルがますます普及しています。この開発モデルでは、バックエンドがビジネス ロジックの処理を担当し、フロントエンドがページの表示とユーザーとの対話を担当し、両者は API を介して通信します。 Golang をバックエンド言語として使用する開発チームにとって、適切なフロントエンド テクノロジを選択することは非常に重要です。この記事では、Golang でフロントエンドとバックエンドを個別に開発する場合に選択する推奨フロントエンド テクノロジについて説明します。

Vue Router Lazy-Loading ルーティングの独自の利点、ページのパフォーマンスを最適化する方法は? Vue Router Lazy-Loading ルーティングの独自の利点、ページのパフォーマンスを最適化する方法は? Sep 15, 2023 am 10:36 AM

VueRouter は、Vue.js によって公式に提供されているルーティング管理プラグインで、Vue アプリケーションでのページ ナビゲーションとルート切り替えの実装に役立ちます。遅延読み込み機能は VueRouter 独自の利点であり、ページのパフォーマンスを大幅に最適化できます。この記事では、VueRouter の Lazy-Loading ルーティング機能を紹介し、ページのパフォーマンスを最適化するための実践的なコード例をいくつか紹介します。必要に応じて遅延読み込みを行う

React Router が表示されない場合はどうすればよいですか? React Router が表示されない場合はどうすればよいですか? Dec 30, 2022 am 09:30 AM

ルーターが表示されない場合の解決策: 1. 親ルーティング コンポーネントにbrowserRouterを追加してルーターをラップします; 2. 「this.props.history.go()」を使用してコンポーネントを更新します; 3. 「forcerefresh」をbrowserrouter パラメーターに追加します={true}"; 4. "<Route>" にフック関数を記述し、このルートから出るときまたはこのルートに入るときに呼び出します。

Vue Router 遅延読み込みルーティング: ページのパフォーマンス向上に役立つトレンド Vue Router 遅延読み込みルーティング: ページのパフォーマンス向上に役立つトレンド Sep 15, 2023 am 08:03 AM

VueRouter は、Vue.js フレームワークの公式ルート マネージャーです。これにより、開発者はルート マッピングを通じてページ コンテンツを切り替えることができるため、単一ページ アプリケーションの制御性が向上し、保守が容易になります。ただし、アプリケーションが複雑になるにつれて、ルートの読み込みと解析がパフォーマンスのボトルネックになる可能性があります。この問題を解決するために、VueRouter は、実際に必要になるまでルートの読み込みを延期する、ルートの遅延読み込み機能を提供します。遅延読み込みは、

PHP開発者必携:MySQLの読み書き分離の実装方法を詳しく解説 PHP開発者必携:MySQLの読み書き分離の実装方法を詳しく解説 Mar 04, 2024 pm 04:36 PM

PHP 開発者は、Web サイト開発プロセス中にデータベース操作に直面することがよくありますが、非常に人気のあるデータベース管理システムである MySQL の読み取りと書き込みの分離は、Web サイトのパフォーマンスを向上させる重要な手段の 1 つです。 PHP 開発では、MySQL の読み取りと書き込みの分離を実装すると、Web サイトの同時アクセス機能とユーザー エクスペリエンスが大幅に向上します。この記事では、MySQL の読み書き分離の実装方法を詳細に紹介し、PHP 開発者が読み書き分離機能をよりよく理解して適用できるように、具体的な PHP コード例を示します。 MySQLの読み取りとは何ですか

ルータールーティングを使用して vue3 でジャンプパラメータを実装する方法 ルータールーティングを使用して vue3 でジャンプパラメータを実装する方法 May 16, 2023 am 10:49 AM

1. ルート ジャンプ 1. 最初に API を導入します — useRouterimport{useRouter}from'vue-router'2. ジャンプ ページでルーター変数を定義します // 最初にセットアップで constrouter=useRouter() を定義します 3. router.push を使用してページにジャンプします //String router.push('home')//Object router.push({path:'home'})//

See all articles