天天看點

vue img src 動态指派_總結vue的相關知識

vue img src 動态指派_總結vue的相關知識

總結vue的實戰用的相關知識點

一、父子元件之間傳遞參數

  1. 可以使用$ref擷取dom元素或者是子元件
  • 可以通過ref實作父元件調用子元件的函數

調用子元件的方法show()

this.$refs.childComponent.show()
  1. 子元件擷取父元件的資料 可以直接使用props屬性

二、vue中的生命周期鈎子

三、vue的static和assert檔案夾

寫在前面: 這是一篇vue-cli的幾個小知識點簡單介紹,适用于剛接觸vue-cli腳手架以及對此方面并不太了解的同學,大佬們繞道。有需要的朋友可以做一下參考,喜歡的可以點波贊,或者關注一下,希望可以幫到大家。

靜态資源處理: assets和static檔案夾的差別 相信有很多人知道vue-cli有兩個放置靜态資源的地方,分别是src/assets檔案夾和static檔案夾,這兩者的差別很多人可能不太清楚。

assets目錄中的檔案會被webpack處了解析為子產品依賴,隻支援相對路徑形式。例如,在

vue img src 動态指派_總結vue的相關知識

和 background: url(./logo.png)中,”./logo.png” 是相對的資源路徑,将由Webpack解析為子產品依賴。

static/ 目錄下的檔案并不會被Webpack處理:它們會直接被複制到最終的打包目錄(預設是dist/static)下。必須使用絕對路徑引用這些檔案,這是通過在 config.js 檔案中的 build.assetsPublicPath 和 build.assetsSubDirectory 連接配接來确定的。

任何放在 static/ 中檔案需要以絕對路徑的形式引用:/static/[filename]。

在我們實際的開發中,總的來說:static放不會變動的檔案 assets放可能會變動的檔案。

在js資料中如何引用圖檔 因為webpack會将圖檔當做子產品來引用,是以在js中需要使用require将圖檔引用進來,不能直接以字元串的形式。

js部分: data () { return { imgUrl: '圖檔位址',//錯誤寫法 imgUrl: require('圖檔位址')//正确的寫法 }}template部分:img标簽形式:或者p背景圖形式:
           

打包上線的背景圖檔的位址問題(包括字型圖示不顯示)

找到build/utils.js修改下面的代碼

if (options.extract) { return ExtractTextPlugin.extract({ use: loaders, fallback: 'vue-style-loader', // 下面是新添加的,打包的時候會多兩級,加上下面的就正确了,圖檔小于10k的會轉為base64,大于的不會轉化 publicPath:'../../' }) } else { return ['vue-style-loader'].concat(loaders) } }
           

對圖檔位址進行動态指派時,圖檔最好放在放在static目錄下,此時引入圖檔時一定要用目前目錄./的形式,打包才不會出問題。

// 模闆 // jsdata () { return { blankImg: './static/images/blankLogo/ABC.png' } },
           

上面的引用打包時才不會出現問題

  • vue的防抖節流實作
前段時間做項目的時候需要用到防抖去做驗證問題,遇到了不少問題,在這裡記錄總結下,以便日後使用

解決辦法: 在公共函數部分定義下面的函數

export function debounce(func, delay) { let timer return function (...args) { if (timer) { clearTimeout(timer) } timer = setTimeout(() => { func.apply(this, args) }, delay) }}
           

我是直接把上面的公共檔案放到vue的原型上,可以在元件内直接使用

下面就是在元件内使用

created() { this.$watch('accout', debounce(() => { this.getRightAccout() }, 500))}
           

這樣就能夠正确使用防抖函數來解決問題。

  • vue中實作自己的插件
在項目中總會遇到自定義的一些功能,可以使用通用函數,也可以實作自己的插件,簡單說下實作思路.

簡單實作

// 定義// plugin.jsexport default { install(Vue){ // install 函數類似于init,在vue的插件中必須使用install命名, this.isIphone(Vue) this.filterData() }, isIphone(Vue){ if(/iP(hone|od|ad)/.test(navigator.userAgent)) { document.body.className += 'iphone' // document.querySelector('input').style.tranform = 'caleY(2)' } }, filterData(){ const searching = 'het'  let filterArr = this.data.map(val => { val.entities = val.entities.filter(entity => { console.log(entity.value.toLowerCase().indexOf(searching.toLowerCase())) return entity.value.toLowerCase().indexOf(searching.toLowerCase()) > -1 }) return val }) console.log(filterArr) return filterArr  }, data: [{ "id": "fb18eee6-423e-475d-9077-c03dd4ffd80f
           

繼續閱讀