摘要:展示信息展示時間結束后,執行回調函數如果有上面就完成了組件的整套邏輯,最后我們還需要把組件掛在。原文鏈接其他使用快速開發單頁應用主體結構使用快速開發單頁應用使用快速開發單頁應用登錄頁面使用快速開發單頁應用功能組件與路由組件通信
本文所涉及代碼全在vue-cnode
上圖是我們demo項目的整體結構,我們可以看見在第三級有三個東西router,全局組件,功能組件。其中全局組件和功能組件是脫離于router的,因為這兩部分是所有邏輯組件共有的。我們將他提出來,放在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)
首先我們需要獲取tip在vuex里面的數據:
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組件一共做了三件事:
監聽vuex獲取的tip變量,在tip變量改變時執行tipShow方法。
展示信息
展示時間結束后,執行回調函數(如果有)
上面就完成了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...
其他
使用Vue快速開發單頁應用-主體結構
使用Vue快速開發單頁應用-vue-router
使用Vue快速開發單頁應用-登錄頁面
使用Vue快速開發單頁應用-功能組件與路由組件通信
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/65084.html
摘要:本文以及后面相應文章,主要是相關技術棧來快速的實現單頁應用開發。原文出處其他使用快速開發單頁應用主體結構使用快速開發單頁應用使用快速開發單頁應用登錄頁面使用快速開發單頁應用功能組件與路由組件通信 本文所涉及代碼全在vue-cnode 單頁應用,即在一個頁面集成系統中所有功能,整個應用只有一個頁面。因為路由的控制在前端,單頁面應用在頁面切換時比傳統頁面更快,從而在前端體驗更好。 將邏輯從...
摘要:當前路由對象調用此函數處理切換過程的下一步終止切換重定向到另一個路由由于是路由切換后,只有上面的兩個屬性。原文地址其他使用快速開發單頁應用主體結構使用快速開發單頁應用使用快速開發單頁應用登錄頁面使用快速開發單頁應用功能組件與路由組件通信 本文所涉及代碼全在vue-cnode vue-router主要作用是將路由控制,轉移到前端。我們將會在vue-router里面保存一個路由表,在vue...
摘要:我采用原生編寫后臺,因為感覺增刪改查的功能很簡單,就懶得用框架了其實是不會。瀏覽模式它也有一個,用來切換文章列表和文章詳情,也就是和編輯模式它加載了作為工具欄,然后可以進行文章的撰寫與修改。 介紹 項目地址:https://github.com/jrainlau/MintloG (特別亂,參考就好-_-|||)showImg(https://segmentfault.com/img/b...
摘要:首先我們從登錄頁面以及開始,因為后續很多其它的頁面都需要登錄信息。大家還是看看我這做個指引,具體還是看代碼原文地址其他使用快速開發單頁應用主體結構使用快速開發單頁應用使用快速開發單頁應用登錄頁面使用快速開發單頁應用功能組件與路由組件通信 本文所涉及代碼全在vue-cnode 前面兩篇都是介紹組織結構和vue-router,從本文開始我們將講一些如何優雅的用vue編寫單頁應用。首先我們從...
摘要:在第一版的基礎上進行了優化,新增一些面試題知識點,對一些知識點進行更加深入的描述。可以在該鉤子中進一步地更改狀態,不會觸發附加的重渲染過程。改變中的狀態的唯一途徑就是顯式地提交。這兩個可以在不進行刷新的情況下,操作瀏覽器的歷史紀錄。 在第一版的基礎上進行了優化,新增一些面試題/知識點,對一些知識點進行更加深入的描述。 一、對于MVVM的理解? MVVM 是 Model-View-Vie...
閱讀 540·2021-08-31 09:45
閱讀 1646·2021-08-11 11:19
閱讀 883·2019-08-30 15:55
閱讀 821·2019-08-30 10:52
閱讀 2845·2019-08-29 13:11
閱讀 2924·2019-08-23 17:08
閱讀 2832·2019-08-23 15:11
閱讀 3066·2019-08-23 14:33