打開可視化面板css
vue ui
建立項目vue
能夠保存爲預設,下次使用此預設時就不須要再次配置了webpack
建立完成後咱們能夠看到他的文件結構web
入口文件在public中,不在根目錄vue-router
配置全局變量 根目錄新建vue.config.jsvuex
// Vue.config.js 配置選項 module.exports = { // 選項 // 基本路徑 vue.cli 3.3之前請使用baseUrl publicPath: "/", // 構建時的輸出目錄 outputDir: "dist", // 放置靜態資源的目錄 assetsDir: "", // 是否爲生產環境構建生成 source map? productionSourceMap: true, // 調整內部的 webpack 配置 configureWebpack: () => {}, //(Object | Function) chainWebpack: () => {}, // CSS 相關選項 css: { // 將組件內的 CSS 提取到一個單獨的 CSS 文件 (只用在生產環境中) // 也能夠是一個傳遞給 `extract-text-webpack-plugin` 的選項對象 extract: true, // 是否開啓 CSS source map? sourceMap: false, // 爲預處理器的 loader 傳遞自定義選項。好比傳遞給 // Css-loader 時,使用 `{ Css: { ... } }`。 loaderOptions: {}, // 爲全部的 CSS 及其預處理文件開啓 CSS Modules。 // 這個選項不會影響 `*.vue` 文件。 modules: false }, // 配置 webpack-dev-server 行爲。 devServer: { //true 自動打開瀏覽器 open: true, port: 8088, }, // 三方插件的選項 pluginOptions: { // ... } }
啓動命令:定位到根目錄,執行命令 npm run serve
npm
自動打開項目網頁瀏覽器
新建兩個文件child.vue parent.vueapp
父子組件的傳值異步
app.vue
<template> <!-- <router-link to="/">Home</router-link> | <router-link to="/about">About</router-link> <router-link to="/parent">Parent</router-link> --> <m-parent/> </template> <style> </style> <script> import MParent from './views/Parent' export default { components: { MParent } } </script>
parent.vue
<template> <div> <h1> Parent</h1> <div> <m-child msg="'hello world'" @showMsg="showMsg" ref="testRef"></m-child> </div> <p>子組件向父組件傳過來的值:{{msg}}</p> </div> </template> <script> import MChild from './Child' export default { data(){ return{ msg:'' } }, components:{ MChild }, methods:{ showMsg(val){ this.msg = val } }, // 鉤子 mounted(){ //打印子組件的數據 console.log(this.$children) console.log(this.$children[0]['aa']) //ref //獲取上面ref="testRef" 的組件的信息 console.log('ref',this.$refs.testRef) } } </script> <style scoped> </style>
child.vue
<template> <div> <h3>Child</h3> <p>父組件傳過來的值:{{msg}}</p> <button @click="passMsg">向父組件傳值</button> </div> </template> <script> export default { data(){ return{ aa:'測試aa' } }, // 接收父組件傳過來的值 props:{ msg:{ type:String, default:'' } }, methods:{ passMsg(){ // this.$emit('自定義的事件名','傳遞的值') this.$emit('showMsg','我是來自子組件的值') } }, // 鉤子 mounted(){ console.log(this.$$parent) } } </script>
非父子組件之間的傳值
App.vue 向child.vue傳值 1.新建bus.js import Vue from 'vue' export default new Vue; 2.app.vue 給出點擊按鈕 <button @click="passMsg">事件總線傳遞</button> 引入bus.js <script> import bus from './util/bus' export default { methods:{ passMsg(){ bus.$emit('msg','事件總線傳遞-----') } } } </script> 3. child.vue <p>{{childMsg}}</p> <script> import bus from '../util/bus' export default { // 接收父組件傳過來的值 props:{ childMsg:{ type:String, default:'' } }, // 鉤子 mounted(){ bus.$on('msg',(val)=>{ this.childMsg = val }) } } </script>
$attrs/ $listeners
解決多級組件傳值問題
vue-router
跳轉
<router-link to="/page">點擊跳轉</router-link> <button @click="toPage">經過事件跳轉</button> methods:{ toPage(){ this.$router.push({path:'/page'}) } }
動態路由
{ path: '/list/:id', name: 'List', component: () => import('../views/List.vue') }, {{$route.params.id}}
/store 中
import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) export default new Vuex.Store({ state: { count:9 }, mutations: { add(state){ state.count++ }, decreate(state){ state.count-- } }, // 異步操做 actions: { delayAdd(context){ setTimeout(()=>{ context.commit('add') },1000) } }, modules: { } })
獲取store中的值 <p>{{vuex_count}}</p> computed:{ vuex_count(){ return this.$store.state.count } }
本文由博客一文多發平臺 OpenWrite 發佈!