https://segmentfault.com/a/11...css
https://segmentfault.com/a/11...vue
基礎問題 https://juejin.im/post/59fa92...webpack
Vue的模板是DOM模板,使用瀏覽器原生的解析器而不是本身實現一個。相比字符串模板,DOM模板有一些好處,可是也有問題,它必須是有效的HTML片斷。一些HTML元素對什麼元素能夠放在它裏面有限制。常見的限制有:web
a不能包行其餘的交互元素(如按鈕、連接)segmentfault
ul和ol只能直接包含li。後端
select只能包含option和optgroup。數組
table只能直接包含thead、tbody、ftoot、tr、caption、col、colgroup。瀏覽器
tr只能直接包含th和td。app
在實際應用中,這些限制會致使意外的結果。儘管再簡單的狀況下它可能能夠工做,可是咱們不能依賴自定義組件在瀏覽器驗證以前展開結果。==例如<my-select><option>....</option></my-select>不是有效的模板,即便my-select組件最終展開爲<select>...</select>。==異步
另外一個結果是,自定義標籤(包括自定義元素和特殊標籤,如<component>、<template>、<partial>)不能用在ul、select、table等對內部元素有限制的標籤內。放在這些元素內的自定義標籤將被提到元素的外面,於是渲染不正確。
自定義元素應當使用is特性,如 <table> <tr is="my-component"></tr> </table> <template> 不能用在<table>內,這時應該使用<tbody>,<table>能夠有多個<tbody>。以下: <table> <tbody v-for="item in items"> <tr>Even row</tr> <tr>Odd row</tr> </tbody> </table>
當在組件中使用 v-for 時,key 如今是必須的。
<ul> <li v-for='(item, key) in items' :key='key'> {{ key }} - {{ item }} </ul>
其中 assetsSubDirectory 指靜態資源文件夾,也就是打包後的 js、css、圖片等文件所放置的文件夾,這個默認通常不會有問題。
assetsPublicPath 指靜態資源的引用路徑,默認配置爲 /,即網站根目錄,與 assetsSubDirectory 組合起來就是完整的靜態資源引用路徑 /static。
build.assetsSubDirectory: 'static' build.assetsPublicPath: './' dev.assetsSubDirectory: 'static' dev.assetsPublicPath: '/'
只要把根目錄改成相對目錄就行了:
const AsyncComponent = () => import('./AsyncComponent')
Vue.component( 'async-webpack-example', () => import('./my-async-component') )
相比於異步路由組建,異步組件工廠通常適用於組件內進一步小顆粒度的拆分處理,如:大致量組件內初次加載時的非必要組件(組件內嵌套的彈窗組件或 Popover 組件等)。
圖片引用問題。直接把本地圖片地址放在src裏沒問題。但若是把地址提取出來寫在data裏或者經過method動態給src賦值則引用不到。
由於放在template模板裏會被webpack打包因此能夠,而放在data或者動態賦值,圖片路徑只是一個字符串webpack不會處理因此引用不到。
解決辦法:經過import或者required引入。import src from ‘../../img.png’或者data:{img:require(‘../../img.png’)}
後端傳過來的數組是一個數組對象,頁面中綁定對象中某一具體的屬性,當該值變化時調用某個函數,天然想到就是watch方法。但如何==watch數組對象中某一個具體的屬性==,顯然不可能一個個屬性寫watch。
解決辦法:
有一個正常的class, 有一個v-bind:class
<div class="test" :class="{'hasClass': ifHasClass}"></div>
給元素動態增長class時,能夠在模板中經過:class={‘hasClass’: ifHasClass}來實現,當ifHasClass爲true時,該元素會自動加上hasClass的樣式。
動態綁定的class能夠與正常寫的一塊兒使用,但若是在一個元素中使用了兩個class則會報錯
let vm = new Vue({ el: '#app', render: h => h(App) }) console.log(vm)
import App from './App.vue' console.log(App)
watch: { //使用了箭頭函數,則this是 {a: {}}, 不是當前vue實例 text: (val, oldval) => { console.log(this) } }
是和vue單文件組件返回值一致的,只是外面又包了個對象,將返回值做爲屬性值使用了。
在公共的父組件有一個標誌位,組件A經過$emit('event', value)來修改該標誌位,將該標誌位傳給組件B,組件B watch該標誌位,觸發行爲。
當外部某一組件想觸發keep-alive其中一個非激活狀態的component的方法時,能夠加個標誌位,組件內watch該標誌位, 變化時觸發指定方法。
this.$refs.component 是指的實時的當前激活的組件
<keep-alive> <component :is="currentFollowComponent" :project-refresh.sync="followProjectRefresh" > </component> </keep-alive>