Vueを使用した単一ページアプリケーションの迅速な開発-機能コンポーネントとルーティングコンポーネントの通信
本明細書に関連するコードはすべてvue-cnodeにある
上図は私たちのdemoプロジェクトの全体的な構造で、3番目のレベルに3つのものrouter、グローバルコンポーネント、機能コンポーネントが見えます.グローバルコンポーネントと機能コンポーネントはrouterから離れています.この2つの部分はすべての論理コンポーネントが共有しているからです.私たちは彼を出してAppに置いた.vueはrouterの下に置かれているルーティングコンポーネントではなく、一度だけ参照してグローバルに呼び出すためです.
しかしながら、具体的なルーティングロジックコンポーネントが示すグローバルコンポーネントの内容は異なり、機能コンポーネントのインタラクションを必要とする内容も異なるため、異なるルーティングロジックコンポーネントでグローバルコンポーネントと機能コンポーネントを制御する必要がある.
この文書では、vuexを使用してグローバルコンポーネントと機能コンポーネントを制御する方法について説明します.
vuexを使用して論理データを転送する
制御といえば、実はコンポーネント間のインタラクションであり、vueではコンポーネントのインタラクションには多くの方法があり、ここではvuexを使用します.
機能コンポーネントとグローバルコンポーネントの機能的インタラクションを行うためのmodule(doc_state)を個別に作成し、moduleでは機能コンポーネントまたはグローバルコンポーネントに必要なデータ、関数メソッドなどを初期化します.次の図に示します.
ここではtip(ヒント)コンポーネントを例に説明し、doc modulesは
次にdoc_を定義しますActionsは私たちのactionを定義します.
Actionsは、ルーティングロジックコンポーネントで参照され、actionを呼び出すとtipコンポーネントを制御します.
doc_をstateをstoreにマウントします.jsでいいです~
tipコンポーネント
私たちのcommonフォルダにtipを新規作成します.vue.彼は私たちのヒント情報コンポーネントです.(経路
まず、vuexのtipのデータを取得する必要があります.
具体的な論理です
上のtipVisibleは、templateで表示を制御するために使用される変数です.
tipコンポーネントは全部で3つのことをしました. vuexが取得したtip変数を傍受し、tip変数が変更されたときにtipShowメソッドを実行する. 展示情報 展示時間終了後、コールバック関数(ある場合) を実行する.
上にはtipコンポーネントの論理が完成し、最後にtipコンポーネントをAppに掛ける必要があります.vue.
template:
js:
これにより、すべてのルーティングロジックコンポーネントで呼び出すことができます.
呼び出し方法
ログインコンポーネントを例にとります.
まずactionを導入する必要があります.
ログインエラーが発生した場合、ユーザーにメッセージを提示します.
ここでは主にコールバック関数のthisの指向が必要であることに注意してください.以下を推奨します.
矢印関数には、宣言された場所のthisをバインドする役割があります.これにより、callbackで現在のコンポーネントのメソッドを呼び出すことができます.矢印関数を使わずにbindでもいいです~
小結
私たちのコンポーネントのインタラクションは完全にデータによって制御されていることがわかります.機能コンポーネントとvuexのmoduleを構築するときは複雑ですが、論理がより明確で、debugのときも便利です.サブコンポーネント呼び出しも非常に簡単で、インタフェースがかなり提供されています.
テキストリンク:http://hiluluke.cn/2016/08/25...
その他 Vueを使用した1ページのアプリケーションの迅速な開発-本体構造 Vueを使用した1ページのアプリケーションの迅速な開発-vue-router Vueを使用した1ページアプリケーションの迅速な開発-ログインページ Vueを使用した1ページのアプリケーションの迅速な開発-機能コンポーネントとルーティングコンポーネントの通信 .
上図は私たちのdemoプロジェクトの全体的な構造で、3番目のレベルに3つのものrouter、グローバルコンポーネント、機能コンポーネントが見えます.グローバルコンポーネントと機能コンポーネントはrouterから離れています.この2つの部分はすべての論理コンポーネントが共有しているからです.私たちは彼を出してAppに置いた.vueはrouterの下に置かれているルーティングコンポーネントではなく、一度だけ参照してグローバルに呼び出すためです.
しかしながら、具体的なルーティングロジックコンポーネントが示すグローバルコンポーネントの内容は異なり、機能コンポーネントのインタラクションを必要とする内容も異なるため、異なるルーティングロジックコンポーネントでグローバルコンポーネントと機能コンポーネントを制御する必要がある.
この文書では、vuexを使用してグローバルコンポーネントと機能コンポーネントを制御する方法について説明します.
vuexを使用して論理データを転送する
制御といえば、実はコンポーネント間のインタラクションであり、vueではコンポーネントのインタラクションには多くの方法があり、ここではvuexを使用します.
機能コンポーネントとグローバルコンポーネントの機能的インタラクションを行うためのmodule(doc_state)を個別に作成し、moduleでは機能コンポーネントまたはグローバルコンポーネントに必要なデータ、関数メソッドなどを初期化します.次の図に示します.
// doc state
import {
SET_TIP
} from '../mutation_types'
const state = {
tip: {
text: '',
time: 2000,
callback: null
}
}
const mutations = {
[SET_TIP] (state, tip) {
state.tip = tip
}
}
export default {
state,
mutations
}
ここではtip(ヒント)コンポーネントを例に説明し、doc modulesは
/src/vuex/modules/doc_state
にあります.次にdoc_を定義しますActionsは私たちのactionを定義します.
import * as types from '../mutation_types'
export const setTip = ({dispatch}, tip) => {
if (!tip.time) tip.time = 2000 // tip
dispatch(types.SET_TIP, tip)
}
Actionsは、ルーティングロジックコンポーネントで参照され、actionを呼び出すとtipコンポーネントを制御します.
doc_をstateをstoreにマウントします.jsでいいです~
import docState from './modules/doc_state'
export default new Vuex.Store({
modules: {
docState,
content,
userInfo
},
strict: debug,
middlewares: debug ? [] : []
})
tipコンポーネント
私たちのcommonフォルダにtipを新規作成します.vue.彼は私たちのヒント情報コンポーネントです.(経路
/src/components/common/tip.vue
)まず、vuexのtipのデータを取得する必要があります.
vuex: {
getters: {
tip: ({ docState }) => docState.tip
}
},
具体的な論理です
data () {
return {
tipVisible: false
}
},
watch: {
tip: 'tipShow'
},
methods: {
tipShow () {
let self = this
self.tipVisible = true
setTimeout(function () {
self.tipVisible = false
if (self.tip.callback) {
self.tip.callback()
}
}, self.tip.time)
}
}
上のtipVisibleは、templateで表示を制御するために使用される変数です.
{{ tip.text }}
tipコンポーネントは全部で3つのことをしました.
上にはtipコンポーネントの論理が完成し、最後にtipコンポーネントをAppに掛ける必要があります.vue.
template:
js:
import tip from './components/common/tip'
export default {
components: {
tip,
},
}
これにより、すべてのルーティングロジックコンポーネントで呼び出すことができます.
呼び出し方法
ログインコンポーネントを例にとります.
まずactionを導入する必要があります.
import { setMenu, setTip } from '../../vuex/actions/doc_actions'
export default {
vuex: {
actions: {
setTip,
setDetail
}
}
}
ログインエラーが発生した場合、ユーザーにメッセージを提示します.
this.setBaseInfo(this.access, (res) => {
if (res.success) {
this.success()
}
this.setTip({
text: res.msg
})
})
this.setTip
メソッドを呼び出すだけでいいです.簡単じゃないの?コンポーネントが作成されたら、後でみんなで使用すると、この方法を呼び出すだけです.ここでは主にコールバック関数のthisの指向が必要であることに注意してください.以下を推奨します.
this.setTip({
text: 'lala',
callback: () => {
this.xxx()
}
})
矢印関数には、宣言された場所のthisをバインドする役割があります.これにより、callbackで現在のコンポーネントのメソッドを呼び出すことができます.矢印関数を使わずにbindでもいいです~
小結
私たちのコンポーネントのインタラクションは完全にデータによって制御されていることがわかります.機能コンポーネントとvuexのmoduleを構築するときは複雑ですが、論理がより明確で、debugのときも便利です.サブコンポーネント呼び出しも非常に簡単で、インタフェースがかなり提供されています.
テキストリンク:http://hiluluke.cn/2016/08/25...
その他