Vue2 足場に関する注意事項
足場を初期化する
3.1.1
例証する
\1. Vue scaffolding は、Vue が公式に提供する標準化された開発ツール (開発プラットフォーム) です。
\2. 最新バージョンは 4.x です。
\3. ドキュメント: Vue CLI .
3.1.2 具体的な手順
述べる:
\1. ダウンロードが遅い場合は、npm Taobao ミラーを構成してください: npm config set registry
https://registry.npm.taobao.org
最初のステップ (最初の実行のみ): @vue/cli をグローバルにインストールします。
npm install -g @vue/cli
ステップ 2:プロジェクトを作成するディレクトリに切り替え、コマンドを使用してプロジェクトを作成します。
vue create xxxx
ステップ 3: プロジェクトを開始する
npm 実行サーブ
\2. Vue scaffolding はすべての webpack 関連の構成を非表示にします. 特定の webpakc 構成を表示したい場合は、
実行してください: vue inspect > output.js
足場ファイルの構造:
├──node_modules
├──公開
│ ├── favicon.ico: タブアイコン
│ └── index.html: メインページ
├──ソース
│ ├── assets: 静的リソースを保存する
│ │ └── logo.png
│ │── コンポーネント:ストレージコンポーネント
│ │ └── HelloWorld.vue
│ │── App.vue: すべてのコンポーネントをまとめる
│ │── main.js: エントリーファイル
├── .gitignore: gitのバージョン管理で無視される設定
├──babel.config.js: babel設定ファイル
├──package.json:アプリパッケージ設定ファイル
├──README.md:アプリケーション記述ファイル
├──package-lock.json: パッケージのバージョン管理ファイル
Vue の異なるバージョンについて:
1. vue.js と vue.runtime.xxx.js の違い:
(1).vue.js は Vue のフル バージョンであり、以下を含みます: コア関数 + テンプレート パーサー
(2).vue.runtime.xxx.js は Vue の実行中のバージョンであり、以下のみが含まれます: コア関数: テンプレート パーサーなし。
2. vue.runtime.xxx.js にはテンプレート パーサーがないため、テンプレート構成アイテムを使用できません. render 関数を使用して createElement 関数を受け取り、特定のコンテンツを指定する必要があります.
vue.config.js 構成ファイル
vue inspect n> output.js を使用して、Vue scaffolding のデフォルト構成を表示します
スキャフォールディングは、vue.config.js を使用してカスタマイズできます。詳細については、 Vue CLIを参照してください。
参照属性
1. 要素またはサブコンポーネントの実情報を登録および参照するために使用されます (id の置き換え)。
2. アプリケーションが html タグで取得するのは実際の DOM 要素であり、コンポーネント タグでアプリケーションが取得するのはコンポーネント インスタンス オブジェクト (vc) です。
3. 使い方:
マーク: <h1 ref="xxx">......</h1> または <School ref="xxx"></School>
取得: this.$refs.xxx
構成アイテムの小道具
機能: コンポーネントに外部データを受け入れさせる
(1). データ転送: <Demo name="xxx"/> (2). データ受信:
最初の方法 (受信のみ): prpos:['name']
2番目の方法 (制限タイプ): props:{ name:Number }
3番目の方法 (制限タイプ、制限の必要性、デフォルト値の指定): props:{ name:{ type:String, //type required:true, //necessity default:'Old Wang' / /default value } }
注意: props は読み取り専用です. Vue の最下層は、props への変更を監視します. props を変更すると、警告が発行されます. ビジネスで本当に変更する必要がある場合は、props の内容をコピーしてくださいのデータを編集し、 でデータ データを変更します。
mixin(混入)
機能: 複数のコンポーネントで共有されている構成をミックスイン オブジェクトに抽出できます。
使い方:
第一步定义混合,例如:
{
data(){.......}
methods:{......}
.......
}
第二步使用混入,例如:
(1). グローバルミックスイン: Vue.mixin(xxx)
(2). 部分的なミックスイン: mixins['xxx']
プラグイン
機能: Veu の強化に使用
本質: install メソッドを含むオブジェクト。install の最初のパラメーターは Vue で、2 番目以降のパラメーターはプラグイン ユーザーによって渡されるデータです。
プラグインを定義します。
对象.install = function(Vue,ootions)P{
//1.添加全局过滤器
Vue.filter(......)
//2.添加全局指令
Vue.directive(.....)
//3. グローバル mixin との連携 (組み合わせ) Vue.mixmin(.....)
//4. インスタンスメソッドを追加 Vue.prototype.myMethod = function () {.....} Vue.prototype.myProperty = xxx }
プラグインの使用: Vue.use()
スコープ スタイル
機能: 競合を防ぐために、スタイルをローカルで有効にします。
書き方: <スタイルスコープ>
TodoList ケースを要約する
1. コンポーネントのコーディング プロセス:
(1). 静的コンポーネントの分割: コンポーネントは機能ポイントに従って分割する必要があり、命名は html 要素と競合してはなりません。 ( 2). 動的コンポーネントを実現する: データが格納されている場所、データがコンポーネントまたは一部のコンポーネントによって使用されているかどうかを検討します。
1). コンポーネントが使用中です: コンポーネント自体に入れるだけです。
2). 一部のコンポーネントが使用中です: それらを共通の親コンポーネントに配置します (<span style="color:red">状態の昇格</span>)。 ( 3). 相互作用の実現: バインディング イベントから開始します。
2. 小道具は以下に適用されます。
(1). 親コンポーネント ===> 子コンポーネント通信
(2). 子コンポーネント ===> 親コンポーネントの通信 (最初に親が子に機能を与える必要がある)
3. v-model を使用するときは、props は変更できないため、v-model によってバインドされた値を props によって渡される値にすることはできません!
4. props によって渡された値がオブジェクト タイプの場合、Vue はオブジェクトのプロパティを変更するときにエラーを報告しませんが、これはお勧めしません。
webStorage (ローカルストレージ)
1. ストレージ コンテンツは、通常、約 5MB をサポートします (ブラウザによって異なる場合があります)。
2. ブラウザーは、Window.sessionStorage および Window.localStorage プロパティを介してローカル ストレージ メカニズムを実装します。
3. 関連 API:
1.xxxxxStorage.setItem('key','value');
このメソッドは、キーと値をパラメーターとして受け入れ、キーと値のペアをストレージに追加し、キー名が存在する場合は対応する値を更新します。
2.xxxxxStorage.getItem('person');
このメソッドはキー名をパラメーターとして受け取り、キー名に対応する値を返します。
3.xxxxxStorage.removeItem('key');
このメソッドはキー名をパラメーターとして受け取り、ストレージからキー名を削除します。
4.xxxxxStorage.clear()
このメソッドは、ストレージ内のすべてのデータを消去します
4. 備考:
1. SessionStorage に保存されているコンテンツは、ブラウザ ウィンドウを閉じると消えます。
2. LocalStorage に保存されているコンテンツは、消える前に手動で消去する必要があります。
3. xxxxxStoragee.getItem(xxx)
xxx に対応する値が取得できない場合、getItem の戻り値は null です。
4.JSON.parse(null)
結果はまだ null です。
JSON.stringify()
JavaScript オブジェクトを JSON 文字列に変換するために使用されます JSON 文字列をオブジェクトに変換するJSON.parse()
ために使用されます
コンポーネント カスタム イベント
1. 以下に適したコンポーネント間の通信方法: 子コンポーネント ===> 親コンポーネント
2. 使用シナリオ: A が親コンポーネント、B が子コンポーネントで、B が A にデータを渡したい場合、A で B のカスタム イベントを設定する必要があります (イベント コールバックは A にあります)。
-
カスタム イベントをバインドします。
1. 親コンポーネントでの最初の方法:
<Demo @atguigu="test"/>
または<Demo v-on atguigu="test"/>
2. 親コンポーネントでの 2 番目の方法:
<Demo ref="demo"/> ...... mounted(){ this.$refs.xxx.$on('atguigu',test) }
3. カスタム イベントを 1 回だけトリガーする場合は、
once
修飾子または$once
メソッドを使用できます。
4. カスタム イベントをトリガーします。this.$emit('atgugui',数据)
5. カスタム イベントのバインドを解除します。this.$off('atgugui')
native
6. ネイティブ DOM イベントは、修飾子の使用を必要とするコンポーネントにバインドすることもできます
7. 注: this.$refs.student.$on('atguigu',回调)
ah を介してカスタム イベントをバインドする場合、メソッドでコールバックを構成するか、アロー関数を使用する必要があります。そうしないと、問題が発生します。
グローバル イベント バス (GlobalEventBus)
1. コンポーネント間のあらゆる通信に適した、コンポーネント間の通信方法。
2. グローバル イベント バスをインストールします。
new Vue({
......
beforeCreate(){
Vue.prototype.$bus = this //安装全局事件总线,$bus就是当前应用的vm
},
......
})
3. イベント バスを使用します。
1. データの受信: A コンポーネントがデータを受信したい場合、カスタム イベントを A コンポーネントの $bus にバインドし、イベントのコールバックを A コンポーネント自体に残します。
methods(){
demo(data){......}
}
......
mounted(){
this.$bus.$on('xxxx',this.demo)
}
2. データを提供します。this.$bus.$emit('xxxx',数据)
4. beforeDestroy フックで $off を使用して、現在のコンポーネントで使用されているイベントのバインドを解除することをお勧めします。
メッセージの購読と公開 (pubsub)
1. コンポーネント間のあらゆる通信に適したコンポーネント間の通信
2. 使用手順:
1. pubsub をインストールします。npm i pubsub-js
2. 導入:import pubsub from 'pubsub-js'
3. データの受信: コンポーネント A がデータを受信する場合、コンポーネント A でメッセージをサブスクライブし、サブスクライブされたコールバックはコンポーネント A 自体にとどまります。
methods(){
demo(data){......}
}
......
mounted(){
this.pid = pubsub.subscribe('xxx',this.demo) //订阅消息
}
4. データを提供します。pubsub.publist('xxx',数据)
5. beforeDestory フックで登録解除するPubSub.unsubscribe(pid)
のが。
次のティック
1. 文法:this.$nextTick(回调函数)
2.機能:次のDOM更新終了後に指定のコールバックを実行する
3. 使用する場合: データが変更され、更新された DOM に基づいていくつかの操作が実行される場合、nextTick で指定されたコールバック関数で実行する必要があります。
Vue パッケージの遷移とアニメーション
1. 宿題: DOM 要素を挿入、更新、または削除するときは、適切なタイミングでスタイル クラス名を要素に追加します。
2. アイコン:
3.書き込み方法:
1. スタイルを準備します。
▪ 要素にはスタイルがあります:
1. v-enter: エントリーの開始点
2. v-enter-active: 入力中
3. v-enter-to: 終点を入力 ▪ 要素が終了するスタイル:
1. v-leave: 出発点
2. v-leave-active: 離脱中
3. v-leave-to: 終わりを残す
2.<transition>
要素を使用してラップし、name 属性を構成します。
<transition name="hello">
<h1 v-show="isShow">你好啊!</h1>
</transition>
3. 備考: 遷移が必要な要素が複数ある場合は、次を使用する必要があります: を使用し、<transition-group>
各要素でkey
値を指定する必要があります。
Vue 足場構成プロキシ
方法1
vue.config.js に次の構成を追加します。
devServer:{
proxy:"http://localhost:5000"
}
説明します:
1. 利点: 構成が簡単で、リソースを要求するときにフロント エンド (8080) に直接送信できます。
2. 短所: 複数のプロキシを構成できず、リクエストがプロキシを通過するかどうかを柔軟に制御できません。
3. 作業方法: 上記の構成によれば、フロントエンドに存在しないリソースが要求された場合、要求はサーバーに転送されます (最初にフロントエンドのリソースが一致します)。
方法 2
vue.config.js で特定のプロキシ ルールを構成します。
module.exports = {
devServer: {
proxy: {
'/api': { //匹配所有以'/api'开头的请求路径
target: 'http://localhost:5000',//代理目标的基础路径
ws: true,
changeOrigin: true,
pathRewrite:{'^/api':''},
},
'/api2': { //匹配所有以'/foo'开头的请求路径
target: 'http://localhost:5001'//代理目标的基础路径
pathRewrite:{'^/api2':''},
}
}
}
}
/*
changeOrigin设置为true时,服务器收到请求头中的host为:localhost:5000
changeOrigin设置为false时,服务器收到请求头中的host为:localhost:8080
changeOrigin默认值为true
*/
説明します:
1.メリット:プロキシを複数設定でき、リクエストがプロキシを経由するかどうかを柔軟に制御できる。
2. 短所: 構成が少し面倒で、リソースを要求するときにプレフィックスを追加する必要があります。
スロット
1. 機能: 親コンポーネントに html 構造体を子コンポーネントの指定位置に挿入させます。これは、コンポーネント間の通信方法でもあり、親コンポーネント ===> 子コンポーネントに適用されます。
2. 分類: デフォルト スロット、名前付きスロット、スコープ付きスロット
3. 使い方:
1. デフォルトのスロット:
父组件中:
<Category>
<div>html结构</div>
</Category>
子组件中:
<template>
<div>
<!-- 定义插槽 -->
<slot>默认插槽内容...</slot>
</div>
</template>
2. 名前付きスロット:
父组件中:
<Category>
<template slot="center">
<div>html结构</div>
</template>
<template v-slot="footer">
<div>html结构2</div>
</template>
</Category>
子组件中:
<template>
<div>
<!-- 定义插槽 -->
<slot name="center">默认插槽内容...</slot>
<slot name="footer">默认插槽内容...</slot>
</div>
</template>
3. スロットを操作します。
1. 理解:データはコンポーネント自体にありますが、データに従って生成される構造は、コンポーネントのユーザーが決定する必要があります。(ゲームのデータは Category コンポーネントにありますが、データを使用してトラバースされる構造は App コンポーネントによって決定されます)
2. 特定のコーディング:
父组件中:
<Category>
<template scope="scopeData">
<!-- 生成的是ul列表 -->
<ul>
<li v-for="(g,index) in scopeData.games" :key="index">{
{g}}</li>
</ul>
</template>
</Category>
<Category>
<template slot-scope="{scopeData">
<h4 v-for="(g,index) in scopeData.games" :key="index">{
{g}}</h4>
</template>
</Category>
子组件中:
<template>
<div >
<slot :games="games"></slot>
</div>
</template>
<script>
export default {
name:'Category',
props:['title'],
data(){
return{
games:['王者荣耀','和平精英','刺激战场','原神','推箱子'],
}
}
}
</script>
Vuex
1. コンセプト
Vue に集中状態 (データ) 管理を実装し、Vue アプリケーション内の複数のコンポーネントの共有状態を集中管理 (読み取り/書き込み) する Vue プラグイン. コンポーネント間の通信手段でもあり、コンポーネント間の通信に適しています。
2.いつ使うの?
複数のコンポーネントがデータを共有する必要がある場合
3. vuex 環境を構築する
1. ファイルを作成します。src/store/index.js
// 该文件用于创建Vuex中最为核心的store
// 引入Vue
import Vue from 'vue'
// 引入Vuex
import Vuex from 'vuex'
// 应用Vuex的插件
Vue.use(Vuex)
// 准备actions——用于响应组件中的动作
const actions = {}
// 准备mutations——用于操作数据(state)
const mutations = {}
// 准备state——用于存储数据
const state = {}
// 创建并导出/暴露store
export default new Vuex.Store({
actions,
mutations,
state,
})
2. main.js
VM の作成時にstore
構成アイテムを渡す
......
// 引入store
import store from './store'
......
// 创建vm
new Vue({
el:'#app',
render: h => h(App),
store
})
4. 基本的な使い方
1. データの初期化、構成actions
、構成mutations
、およびファイルの操作store.js
// 该文件用于创建Vuex中最为核心的store
// 引入Vue
import Vue from 'vue'
// 引入Vuex
import Vuex from 'vuex'
// 应用Vuex的插件
Vue.use(Vuex)
// 准备actions——用于响应组件中的动作
const actions = {
jia(context,value){
console.log('action中的jia被调用了');
context.commit('JIA',value)
},
}
// 准备mutations——用于操作数据(state)
const mutations = {
// 执行加
JIA(state,value){
console.log('mutations中的JIA被调用了');
state.sum += value
},
}
// 准备state——用于存储数据
const state = {
sum:0 //当前的和
}
// 创建并导出/暴露store
export default new Vuex.Store({
actions,
mutations,
state,
})
2. コンポーネントの vuex でデータを読み取ります。$store.state.sum
3. コンポーネントの vuex のデータを変更します。$store.dispatch('action中的方法名',数据)
または$store.commit('mutations中的方法名',数据)
備考: ネットワーク リクエストやその他のビジネス ロジックがない場合、コンポーネント内でアクションを超えることもできます。つまり、
dispatch
直接書き込みません。commit
5. ゲッターの使用
1. 概念: 状態のデータを使用する前に処理する必要がある場合、getter を使用して処理できます。
2.構成をstore.js
追加しますgetters
......
const getters = {
bigSum(state){
return state.sum*10
}
}
// 创建并导出/暴露store
export default new Vuex.Store({
......
getters,
})
3. コンポーネントでデータを読み取ります。$store.getters.bigSum
6. 4 つのマップ方法の使用
1. mapState メソッド:state
データを計算されたプロパティにマップするのに役立ちます
computed:{
// 借助mapState生成计算属性,从state中读取数据。(对象写法)
...mapState({he:'sum',xuexiao:'school',xueke:'subject'}),
// 借助mapState生成计算属性,从state中读取数据。(数组写法)
...mapState(['sum','school','school']),
}
2. mapGetter メソッド:getters
データを計算されたプロパティにマップするのに役立ちます
computed:{
// 借助mapGetters生成计算属性,从getters中读取数据。(对象写法)
...mapGetters({bigSum:'bigSum'})
// 借助mapGetters生成计算属性,从getters中读取数据。(数组写法)
...mapGetters(['bigSum'])
}
3. mapActions メソッド:ダイアログを生成するために使用されるメソッドactions
、つまり: 含まれる$store.dispatch(xxx)
関数
methods:{
// 借助mapActions生成对应的方法,方法中会调用dispatch去联系吗action(对象写法)
...mapActions({incrementOdd:'jiaOdd',incrementWait:'jiaWait'})
// 借助mapActions生成对应的方法,方法中会调用dispatch去联系吗action(数组写法)
...mapActions(['jiaOdd','jiaWait'])
}
4. mapMutations メソッド:ダイアログの生成を支援するために使用されるメソッドmutations
、つまり: 含まれる$store.commit(xxx)
関数
methods:{
// 借助mapMutations生成对应的方法,方法中会调用commit去联系吗mutations(对象写法)
...mapMutations({increment:'JIA',decrement:'JIAN'}),
// 借助mapMutations生成对应的方法,方法中会调用commit去联系吗mutations(数组写法)
...mapMutations(['JIA','JIAN']),
}
備考: mapActions と mapMutations を使用する場合、パラメーターを渡す必要がある場合: テンプレートでイベントをバインドするときにパラメーターを渡します。それ以外の場合、パラメーターはイベント オブジェクトです。
7. モジュール性 + 名前空間
1. 目的: コードを保守しやすくし、さまざまなデータの分類をより明確にするため。
2.修正store.js
const countAbout = {
namespaced:true //开启命名空间
state:{x:1},
mutations{...},
actions:{...},
getters:{
bigSum(state){
return state.sum*10
}
}
}
const personAbout = {
namespaced:true //开启命名空间
state:{x:1},
mutations{...},
actions:{...},
}
const store = new Vuex.Store({
modules:{
constAbout:constOptions,
personAbout:personOptions
}
})
3. 名前空間を有効にした後、コンポーネントの状態データを読み取ります。
//方式一:自己直接读取
this.$store.state.personAbout.list
//方式二:借助mapState读取
...mapState('constAbout',['sum','school','subject']),
4. 名前空間を有効にした後、コンポーネントのゲッター データを読み取ります。
//方式一:自己直接读取
this.$store.getters['personAbout/firstPersonName']
//方式二:借助mapGetters读取
...mapGetters('constAbout',['bigSum'])
5. 名前空間が有効になった後、コンポーネントでディスパッチが呼び出されます
//方式一:自己直接dispatch
this.$store.dispatch('personAbout/addPersonWang',personObj)
//方式二:借助mapActions读取
...mapActions('constAbout',{incrementOdd:'jiaOdd',incrementWait:'jiaWait'})
6. 名前空間が有効になった後、commit がコンポーネントで呼び出されます
//方式一:自己直接commit
this.$store.commit('personAbout/ADD_PERSON',personObj)
//方式二:借助mapMutations读取
...mapMutations('constAbout',{increment:'JIA',decrement:'JIAN'}),
ルーティング
1. 理解: ルート (ルーター) は一連のマッピング関係 (キーと値) であり、複数のルートを管理するにはルーター (ルーター) が必要です。
2. フロントエンドでの使用: キーはパス、値はコンポーネントです。
1. 基本的な使い方
1. vue-router をインストールします。コマンド:npm i vue-router
2. アプリケーション プラグイン:Vue.use(VueRouter)
3. ルーター構成項目を書き込みます。
// 引入VueRouter
import VueRouter from "vue-router";
// 引入luyou组件
import About from '../components/About'
import Home from '../components/Home'
// 创建router实例对象,去管理一组一组的路由规则
const router = new VueRouter({
routes:[
{
path:'/about',
component:About
},
{
path:'/home',
component:Home
}
]
})
// 暴露router
export default router
4.切り替えを実現する(アクティブクラスは強調表示スタイルを設定できます)
<router-link class="list-group-item" active-class="active" to="/about">About</router-link>
5. 配置を指定する
<router-view></router-view>
2. 注意点
1. ルーティング コンポーネントは通常pages
フォルダに格納され、一般コンポーネントは通常components
フォルダに格納されます。
2. 切り替えることにより、「隠れた」ルーティング コンポーネントがデフォルトで破棄され、必要に応じてマウントされます。
3. 各コンポーネントには$router
、独自のルーティング情報を格納する独自のプロパティがあります。
4. アプリケーション全体でルーターは 1 つしかなく、$router
コンポーネントのプロパティから取得できます。
3. マルチレベル ルーティング (マルチレベル ルーティング)
1. children 構成アイテムを使用して、ルーティング ルールを構成します。
routes:[
{
path:'/about',
component:About
},
{
path:'/home',
component:Home,
children:[ //通过children配置子级路由
{
path:'news', //此处一定不要写:/news
component:News,
},
{
path:'message', //此处一定不要写:/message
component:Message,
}
]
}
]
2.ジャンプ(フルパスを書くため):
<router-link class="list-group-item" active-class="active" to="/home/news">News</router-link>
4. ルートのクエリ パラメータ
1. パラメータを渡す
<!-- 跳转路由并携带query参数,to的字符串写法 -->
<router-link :to="/home/message/detail?id=666&title=你好啊!">跳转</router-link>
<!-- 跳转路由并携带query参数,to的对象写法 -->
<router-link :to="{
path:'/home/message/detail',
query:{
id:m.id,
title:m.title,
}
}"
>跳转</router-link>
2. パラメータを受け取ります。
$route.query.id
$route.query.title
5. ルートの命名
1.機能:ルーティングジャンプを簡素化できます。
2. 使い方
1. ルートに名前を付けます。
{
path:'/demo',
component:Demo,
children:[
{
path:'test',
component:Test,
children:[
{
name:'hello', //给路由命名
path:'welcome',
component:Hello,
}
]
}
]
}
2. ジャンプを単純化します。
<!-- 简化前:需要写完整的路径 -->
<router-link to='/demo/test/welcome'>跳转</router-link>
<!-- 简化后:直接通过名字跳转 -->
<router-link :to="{name:'hello'}">跳转</router-link>
<!-- 简化写法配合传递参数 -->
<router-link
:to="{
name:'xiangqing',
query:{
id:666,
title:'你好',
}
}"
>跳转</router-link>
6. ルーティング用の Paramscan
1. ルーティングを構成し、params パラメーターを受け取るように宣言します。
{
path:'/home',
component:Home,
children:[
{
path:'news',
component:News,
},
{
path:'message',
component:Message,
children:[
{
name:'xiangqing',
path:'detail/:id/:title', //使用占位符声明接收params参数
component:Detail,
}
]
}
]
}
2. パラメータを渡す
<!-- 跳转路由并携带params参数,to的字符串写法 -->
<router-link :to="/home/message/detail/666/你好啊!">跳转</router-link>
<!-- 跳转路由并携带params参数,to的对象写法 -->
<router-link
:to="{
name:'xiangqing',
params:{
id:666,
title:你好,
}
}"
>跳转</router-link>
特別な注意: ルートが params パラメーターを運ぶ場合、to のオブジェクト書き込みメソッドを使用する場合、パス構成アイテムを使用できません。それは名前構成でなければなりません!
3. パラメータを受け取ります。
$route.params.id $route.params.title
7.ルーティング小道具の設定
役割: ルーティング コンポーネントがパラメーターを受け取りやすくする
{
name:'xiangqing'
path:'detail/:id',
component:Detail,
// 第一种写法,props的值为对象,该对象中的所有key-value都会以props的形式传给Detail组件
// props:{a:1,b:'hello'}
// 第二种写法,props的值为布尔值,若布尔值为true,则把路由组件收到的所有params参数通过props传给Detail组件
// props:true
// 第三种写法,props的值为函数,该函数返回的对象中每一组key-value都会通过props传递给Detail组件
props($route){
return {
id:$route.query.id,
title:$route.query.title
}
// 第三种简写形式:
/*props({query:{id,title}}){
return {id,title}
} */
}
}
}
8.<router-link>
置換属性
1. 機能: ルーティング ジャンプ時のブラウザ履歴レコードの操作モードを制御する
2. ブラウザの履歴を書き込むには 2 つの方法があります。push
履歴レコードを追加する方法と、replace
現在のレコードを置き換える方法です。ルートがジャンプする場合、デフォルトはpush
replace
push
replace
3.モードを開く方法:<router-link replace ......>News<router-link>
9. プログラムによるルーティング ナビゲーション
1. 機能:<router-link>
ルーティング ジャンプの助けを借りずに、ルーティング ジャンプをより柔軟にします。
2. 特定のコーディング:
//$router的两个API
this.$router.push({
name:'xiangqing',
params:{
id:xxx,
title:xxx,
}
})
this.$router.replace({
name:'xiangqing',
params:{
id:xxx,
title:xxx,
}
})
this.$router.back() //前进
this.$router.forward() //后退
this.$router.go() //可前进也可后退
10. キャッシュ ルーティング コンポーネント
1. 機能: 表示されていないルーティング コンポーネントを実装し、破棄しないようにします。
2. 特定のコーディング:
<keep-alive include="NewsX">
<router-view></router-view>
</keep-alive>
11. 2 つの新しいライフサイクル フック
1. 機能: ルーティング コンポーネントに固有の 2 つのフック。ルーティング コンポーネントのアクティベーション ステータスを取得するために使用されます。
2. 特定の名前:
1.activated
ルーティング コンポーネントがアクティブ化されたときにトリガーされます。
2.deactivated
ルーティング コンポーネントが非アクティブ化されたときにトリガーされます。
12.ルートガード
1.役割:ルートの権限を制御する
2.分類:グローバルガード、専用ガード、コンポーネントガード
3.グローバルガード:
// 全局前置路由守卫————初始化的时候被调用、每次路由切换之前被调用
router.beforeEach((to,from,next)=>{
console.log('前置路由守卫',to,from);
if(to.meta.isAuth){ //判断当前路由是否需要权限配置
if(localStorage.getItem('school')==='atguigu'){ //权限控制的具体规则
next() //放行
}else{
alert("学校名不对,无权限查看!")
// next({name:'guanyu'})
}
}else{
next() //放行
}
})
// 全局后置路由守卫————初始化的时候被调用、每次路由切换之后被调用
router.afterEach((to,from)=>{
console.log('后置路由守卫',to,from);
if(to.meta.title){
document.title = to.meta.title || '宋一鲤' //修改网页的title
}else{
document.title = 'vue_test
}
})
4.専用ガード:
beforeEnter:(to,from,next) => {
console.log('beforeEnter',to,from);
if(to.meta.isAuth){ //判断当前路由是否需要进行权限控制
if(localStorage.getItem('school')==='atguigu'){
next()
}else{
alert("暂无权限查看")
// next({name:'guanyu'})
}
}else{
next()
}
}
5. コンポーネント内のガード:
// 进入守卫:通过路由规则,进入该组件时被调用
beforeRouteEnter(to,from,next){
},
// 离开守卫:通过路由规则,离开该组件时被调用
beforeRouteLeave(to,from,next){
}
13.ルーターの2つの動作モード
1. URL のハッシュ値は? ——#以降がハッシュ値です。
2. ハッシュ値は HTTP 要求に含まれません。つまり、ハッシュ値はサーバーに送信されません。
3. ハッシュ モード:
1. アドレスには常に # 記号があり、美しくありません。
2. 将来、アドレスがサードパーティのモバイル アプリを通じて共有された場合、アプリが厳密にチェックした場合、そのアドレスは違法としてマークされます。
3. 相性が良い。
4.履歴モード:
1.住所がきれいで美しい。
2. 互換性は、ハッシュ モードよりわずかに劣ります。
3. アプリケーションがオンラインで展開される場合、ページ サーバー 404 の更新の問題を解決するために、バックエンド担当者のサポートが必要です。