❶ vue如何動態調用方法
通常我們會在組件里的 template 屬性定義模板,或者是在 *.vue 文件里的 template 標簽里寫模板。但是有時候會需要動態生成模板的需求,例如讓用戶自定義組件模板,或者設置組件的布局。
例如要做一個類 select 的組件,用戶傳入 options 數據,通過 value prop 獲取選中值,最基本的原型如下。
Vue.component('XSelect', {
template: `
<div class="select">
<input :value="value" readonly />
<div
class="option"
v-for="option in options"
@click="value = option.value">
<span v-text="option.label"></span>
</div>
</div>`,
props: ['value','options']
})
如果此時需要增加一個 API 支持讓用戶自定義 option 部分的模板。此處用 slot 並不能解決問題。
通過 $options.template 修改
通過列印組件對象可以獲得一個信息,在 $options 里定義了一個 template 屬性,寫在 template 標簽里的模板,最終編譯後也會在 $options.template 里。通過文檔的生命周期 可以得知,在 created 的時候, 實例已經結束解析選項, 但是還沒有開始 DOM 編譯 也就是說,如果用戶通過 prop 的數據我們可以獲得,但是模板其實還沒有渲染成 DOM。經過測試,在 created 修改 this.$options.template 是可以改變最終生成的 DOM 的,同時也能拿到 props 的內容。
那麼我們可以修改下代碼,使其支持自定義模板
Vue.component('XSelect', {
props: [
'value',
'options',
{
name: 'template',
default:'<span v-text="option.label"></span>'
}
],
created() {
varoptionTpl =this.template
this.$options.template =`
<div class="select">
<input :value="value" readonly />
<div
class="option"
v-for="option in options"
@click="value = option.value">
${optionTpl}
</div>
</div>`
}
})
用戶使用是就可以傳入模板了
<x-select
:value.sync="value"
template="<span>標簽: {{ option.label }}, 值: {{ option.value }}</span>"
:options="[
{value: 1, label: 'a'},
{value: 2, label: 'b'},
{value: 3, label: 'c'}
]">
</x-select>
可能存在的問題
我們知道 Vue 在內部幫我們做了許多優化,但是在這里可能會由於某些優化導致動態拼接的模板無法渲染成功。例如這里我們不使用 v-for 而是手工遍歷 options 生成需要的 HTML
consttpl = options.map(opt =>`<div>${this.optionTpl}</div>`)
this.$options.template =`
<div class="select">
<input :value="value" readonly>
${tpl}
</div>`
這里會導致一個 BUG,如果一個頁面有多個 x-select 組件,並且 options 長度不一樣,會導致長的 options 的組件後面幾個選項渲染不出來。究其原因是 Vue 會幫我們緩存模板編譯結果。翻看代碼可以找到 vue/src/instance/internal/lifecycle.js 里有做優化,同時提供的 _linkerCachable 本意是給 內聯模板 使用。我們可以通過設置 this.$options._linkerCachable = false 達到我們的目的。
這樣我們就可以開發讓用戶自定義布局的組件了,用戶傳入布局參數,通過手工拼接模板,設置了 _linkerCachable = false 也不會被緩存。
通過 $options.partials 動態添加 partial
使用 partials 也能達到添加自定義模板的目的,但是通常的做法是要全局注冊 partial,這么做並不優雅。 vue-strap 就是這么做的。如果重名了會被覆蓋(初次渲染不會,但是數據更新重新渲染 DOM 時就會被覆蓋)。
通過文檔我們知道可以在組件內部通過 partials 屬性注冊局部的 partial,因此自然而然也可以在 this.$options.partials 去動態添加了。
❷ vue3.0如何點擊按鈕彈出框
vue3.0點擊棚虧+按鈕後點擊按鈕彈出框。
查詢vue官網顯示,點擊+按鈕後彈出選項列表Member子組件,褲慧點擊Member子組件上的按鈕即可點擊按鈕彈出框。鏈純神
vue3.0是iOS和Android平台上的一款Vlog社區與編輯工具,允許用戶通過簡單的操作實現Vlog的拍攝。
❸ vue 的點擊事件怎麼獲取當前點擊的元素
一、首先,在編輯器中創建一個web項目,並在目錄中創建一個新的靜態頁面buttonclick.html:
❹ vue 的點擊事件獲取當前點擊的元素方法
首先
vue的點擊事件
是用
@click
=
「clickfun()」
屬性
在html中綁定的,
在點擊的函數中
添加$event
參數就可以
比如
<button
@click
=
「clickfun($event)」>點擊</button>
methods:
{
clickfun(e)
{
//
e.target
是你當前點擊的元素
//
e.currentTarget
是你綁定事件的元素
}
},
以上這篇vue
的點擊事件獲取當前點擊的元素方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
您可能感興趣的文章:vue如何獲取點擊事件源的方法VUE中v-on:click事件中獲取當前dom元素的代碼vue獲取當前點擊的元素並傳值的實例vue獲取dom元素注意事項在Vue組件中獲取全局的點擊事件方法
❺ Vue-(10)頁面跳轉-傳值
Vue 頁面跳轉,一般用 vue-router 來做。 在我們創建 Vue 項目框架時,在配置文件 package.json 裡面一般都有默認添加的依賴庫。
我們只要創建好 Vue 項目,其他的不用管了,直接用 vue-router 來實現頁面跳轉-傳值。
在頁面 HelloWord.vue 點擊按弊禪飢鈕,跳轉到頁面 textVue.vue ,並且傳值
一,創建兩頁面,跳轉-傳值
1,這里我們用 Vue 框架自帶的頁面 HelloWord.vue ,然後自己創建一個頁面 textVue.vue ,並且放在一個文件下 componebts ,當然文件位置可以改變,為了圖簡單。
2, HelloWord.vue 頁面,添加點擊跳轉-傳值事件
兩種方法 @click 方法和 router-link 方法。
在 HelloWord.vue 頁面, @click 方襲散法
在 HelloWord.vue 頁面, router-link 方法`
3, textVue 頁面,添加接受事件和展示傳遞的值
獲取傳遞的值
展示傳遞的值
二,在 router 文件夾的 index 文件下,配置好頁面路徑
最終效果圖如下:
注釋:1,當新建 Vue 文件,不在租返文件下,在其他文件夾的時候,那麼在 router 文件夾的 index 文件如下。
注釋:2,全局視圖
❻ Vue Router 項目刷新當前頁面的三種方法
第三種方案同樣適用於指定頁面,或者指定div刷新