欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

html中創(chuàng)建并調(diào)用vue組件的幾種方法匯總

 更新時(shí)間:2020年11月17日 09:02:50   作者:Echoyya、  
這篇文章主要介紹了html中創(chuàng)建并調(diào)用vue組件的幾種方法匯總,幫助大家更好的理解和使用vue框架,感興趣的朋友可以了解下

作者:Echoyya
出處:https://www.cnblogs.com/echoyya/

最近在寫(xiě)項(xiàng)目的時(shí)候,總是遇到在html中使用vue.js的情況,且頁(yè)面邏輯較多,之前的項(xiàng)目經(jīng)驗(yàn)都是使用腳手架等已有的項(xiàng)目架構(gòu),使用.vue文件完成組價(jià)注冊(cè),及組件之間的調(diào)用,還沒(méi)有過(guò)在html中創(chuàng)建組件的經(jīng)驗(yàn),所以借此機(jī)會(huì)學(xué)習(xí)總結(jié)一下。

方法一:Vue.extend( options )

  • 用法:使用基礎(chǔ) Vue 構(gòu)造器,創(chuàng)建一個(gè)“子類”。參數(shù)是一個(gè)包含組件選項(xiàng)的對(duì)象。data 選項(xiàng)是特例,需要注意 - 在 Vue.extend() 中它必須是函數(shù)
  • extend 創(chuàng)建的是 Vue 構(gòu)造器,而不是我們平時(shí)常寫(xiě)的組件實(shí)例,所以不可以通過(guò) new Vue({ components: testExtend }) 來(lái)直接使用,需要通過(guò) new Profile().$mount('selector選擇器') 來(lái)掛載到指定的元素上。
  • Vue.extend + vm.$mount 組合
// 借用官網(wǎng)的例子,小小改動(dòng)了一下
// 在父組件中,創(chuàng)建一個(gè)子組件,并調(diào)用
<div id='app'>
  <button>{{message}}</button>
  <div id="mount-point"></div>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script type="text/javascript">
 var vm = new Vue({
  el:"#app",
  data:{
   message:'父組件'
  },
 });
 // 創(chuàng)建構(gòu)造器
 var Profile = Vue.extend({
  template: '<p>{{firstName}} {{lastName}} {{alias}}</p>',
  data: function () {
   return {
    firstName: 'N',
    lastName: 'H',
    alias: 'Y'
   }
  }
 })
 // 創(chuàng)建 Profile 實(shí)例,并掛載到一個(gè)元素上。
 new Profile().$mount('#mount-point')
 </script>

方法二:Vue.component( id, [definition] ) + Vue.extend( options )

用法:Vue.component()注冊(cè)或獲取全局組件。注冊(cè)還會(huì)自動(dòng)使用給定的 id 設(shè)置組件的名稱

<div id="app">
 <!-- 如果要使用組件,直接把組件的名稱以 HTML 標(biāo)簽的形式,引入到頁(yè)面中-->
 <todo :todo-data="todoList"></todo>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script type="text/javascript">
// 構(gòu)建一個(gè)子組件
var todoItem = Vue.extend({
 template: ` <li> {{ text }} </li> `,
 props: ['text']
})

// 構(gòu)建一個(gè)父組件
var todoWarp = Vue.extend({
 template: `
  <ul>
   <todo-item v-for="(item, index) in todoData" v-text="item.text"></todo-item>
  </ul>
  `,
 props: ['todoData'],
 // 局部注冊(cè)子組件
 components: {
  //使用 components 定義組件時(shí),若組件名稱使用駝峰命名,則在引用組件時(shí),需要把大寫(xiě)改為小寫(xiě),并且用'-'將單詞連接
  todoItem: todoItem
 }
})
// 注冊(cè)到全局
Vue.component('todo', todoWarp) // 等同于下面這種寫(xiě)法
Vue.component('todo',Vue.extend({
 template : 'xxx',
 props:[xxx],
 components:'xxx'
}))

new Vue({
 el: '#app',
 data: {
  todoList: [
   { id: 0, text: '工作' },
   { id: 1, text: '學(xué)習(xí)' },
   { id: 2, text: '休息' }
  ]
 }
})
</script>

方法三:直接使用Vue.component()

<div id="app">
 <mycom></mycom>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script type="text/javascript">
 Vue.component('mycom',{
  template : '<h3>這是使用 Vue.component 創(chuàng)建的組件</h3>'
 })
 new Vue({
  el: '#app'
 })
</script>

但是這樣寫(xiě)會(huì)有一個(gè)問(wèn)題:在h3標(biāo)簽后出現(xiàn)另一個(gè)標(biāo)簽,就會(huì)出問(wèn)題,

Vue.component('mycom',{
 template : '<h3>這是使用 Vue.component 創(chuàng)建的組件</h3><h3>這是使用 Vue.component 創(chuàng)建的組件</h3>'
})

  • 原因:組件template屬性指向的模板內(nèi)容,必須有且只能有唯一的一個(gè)根元素
  • 解決方法: 用唯一的div作為父元素,將多個(gè)子元素包裹

方法四:使用Vue.component()

在被控制的 #app 外面使用 template 元素,定義組建的HTML模板結(jié)構(gòu)

<div id="app">
 <mycom></mycom>
</div>
<template id="tem1">
 <h1>這是 template 元素</h1>
</template>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script type="text/javascript">
 Vue.component('mycom', {
  template: '#tem1'
 });
 new Vue({
  el: '#app'
 })
</script>

方法五:使用Vue.component() + is

<div id="app">
 <ul>
  <li is="todo-item" v-for="(todo,index) in todos " :title="todo" :key="index" @remove="removeTodo(index)"></li>
 </ul>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script type="text/javascript">
 Vue.component('todo-item', {
  template: `
   <li>
    {{title}}
    <button @click="$emit('remove')">remove</button>
   </li>
  `,
  props: ['title']
 })
 new Vue({
  el: "#app",
  data: {
   todos: ["eating", "swimming", "reading"]
  },
  methods: {
   removeTodo: function (index) {
    this.todos.splice(index, 1)
   }
  }
 })

補(bǔ)充說(shuō)明一下is屬性:

有些 HTML 元素,諸如 ul、ol、table 和 select,對(duì)于可以出現(xiàn)在其內(nèi)部元素是有嚴(yán)格限制的。而有些元素,諸如 li、tr 和 option,只能出現(xiàn)在特定的元素內(nèi)部。這會(huì)導(dǎo)致我們使用這些有約束條件的元素時(shí)遇到一些問(wèn)題。例如

<table>
 <blog-post-row></blog-post-row>
</table>

這個(gè)自定義組件 會(huì)被作為無(wú)效的內(nèi)容提升到外部,并導(dǎo)致最終渲染結(jié)果出錯(cuò)。幸好這個(gè)特殊的 is attribute 給了我們一個(gè)變通的辦法:

<table>
 <tr is="blog-post-row"></tr>
</table>

以上就是html中創(chuàng)建并調(diào)用vue組件的幾種方法匯總的詳細(xì)內(nèi)容,更多關(guān)于html 創(chuàng)建調(diào)用vue組件的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • vue父子組件的嵌套的示例代碼

    vue父子組件的嵌套的示例代碼

    本篇文章主要介紹了vue父子組件的嵌套的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09
  • 在Vue中使用Avue、配置過(guò)程及實(shí)際應(yīng)用小結(jié)

    在Vue中使用Avue、配置過(guò)程及實(shí)際應(yīng)用小結(jié)

    在項(xiàng)目中遇到通過(guò)點(diǎn)擊加號(hào)實(shí)現(xiàn)輸入框的增加、以及對(duì)該輸入框的輸入內(nèi)容進(jìn)行驗(yàn)證,通過(guò)這些誘導(dǎo)因素創(chuàng)作的這篇文章,本文重點(diǎn)給大家介紹在Vue中使用Avue、配置過(guò)程以及實(shí)際應(yīng)用,需要的朋友可以參考下
    2022-10-10
  • vue實(shí)現(xiàn)數(shù)字+英文字母組合鍵盤(pán)功能

    vue實(shí)現(xiàn)數(shù)字+英文字母組合鍵盤(pán)功能

    這篇文章主要介紹了vue實(shí)現(xiàn)數(shù)字+英文字母組合鍵盤(pán)功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-12-12
  • 如何使用el-cascader組件寫(xiě)下拉級(jí)聯(lián)多選及全選功能

    如何使用el-cascader組件寫(xiě)下拉級(jí)聯(lián)多選及全選功能

    這篇文章主要介紹了如何使用el-cascader組件寫(xiě)下拉級(jí)聯(lián)多選及全選功能,因?yàn)槭怯腥x的功能,所以不能直接使用el-cascader組件,?而是選擇使用el-select組件,?在此組件內(nèi)部使用el-cascader-panel級(jí)聯(lián)面板,感興趣的朋友跟隨小編一起看看吧
    2024-03-03
  • 使用Mockjs模擬接口實(shí)現(xiàn)增刪改查、分頁(yè)及多條件查詢

    使用Mockjs模擬接口實(shí)現(xiàn)增刪改查、分頁(yè)及多條件查詢

    Mock.js是一個(gè)模擬數(shù)據(jù)生成器,可以讓前端獨(dú)立于后端進(jìn)行開(kāi)發(fā),下面這篇文章主要給大家介紹了關(guān)于使用Mockjs模擬接口實(shí)現(xiàn)增刪改查、分頁(yè)及多條件查詢的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • vue監(jiān)聽(tīng)瀏覽器的后退和刷新事件,阻止默認(rèn)的事件方式

    vue監(jiān)聽(tīng)瀏覽器的后退和刷新事件,阻止默認(rèn)的事件方式

    這篇文章主要介紹了vue監(jiān)聽(tīng)瀏覽器的后退和刷新事件,阻止默認(rèn)的事件方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • vue路由跳轉(zhuǎn)了但界面不顯示的問(wèn)題及解決

    vue路由跳轉(zhuǎn)了但界面不顯示的問(wèn)題及解決

    這篇文章主要介紹了vue路由跳轉(zhuǎn)了但界面不顯示的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • 淺談vue-router 路由傳參的方法

    淺談vue-router 路由傳參的方法

    這篇文章主要介紹了淺談vue-router 路由傳參的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12
  • vue3+vite使用jsx和tsx詳情

    vue3+vite使用jsx和tsx詳情

    這篇文章主要介紹了vue3+vite使用jsx和tsx詳情,文章通過(guò)安裝@vitejs/plugin-vue-jsx展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-05-05
  • vue項(xiàng)目打包發(fā)布上線的方法步驟

    vue項(xiàng)目打包發(fā)布上線的方法步驟

    本文主要介紹了vue項(xiàng)目打包發(fā)布上線的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11

最新評(píng)論