成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

vue入門筆記體系(六)vue組件

niuxiaowei111 / 3142人閱讀

摘要:更推薦用和實(shí)現(xiàn)父子組件通信創(chuàng)建實(shí)例此時(shí)打印出組件繼承使用基礎(chǔ)構(gòu)造器,創(chuàng)建一個(gè)子類。包含組件選項(xiàng)的對象創(chuàng)建構(gòu)造器創(chuàng)建實(shí)例,并掛載到一個(gè)元素上。該對象包含可注入其子孫的屬性。和綁定并不是可響應(yīng)的。

組件注冊

關(guān)于組件名:

*組件名可以是kebab-case (短橫線分隔命名)或者PascalCase (駝峰式命名)
當(dāng)使用 kebab-case (短橫線分隔命名) 定義一個(gè)組件時(shí),你也必須在引用這個(gè)自定義元素時(shí)使用 kebab-case
當(dāng)使用 PascalCase (駝峰式命名) 定義一個(gè)組件時(shí),你在引用這個(gè)自定義元素時(shí)兩種命名法都可以使用。*

全局注冊
//在注冊之后可以用在任何新創(chuàng)建的 Vue 根實(shí)例 (new Vue) 的模板中
Vue.component("my-component-name", {
  // ... 選項(xiàng) ...
})
局部注冊
const component = {
    template: `
    
`, data() { return { text: 123 } }, methods:{ } } const app = new Vue({ //el:"#root", components: { comp: component }, template: "", }).$mount("#root")
模板的要求

注意:組件的模板只能有一個(gè)根元素。下面的情況是不允許的。

template: `
這是一個(gè)局部的自定義組件,只能在當(dāng)前Vue實(shí)例中使用
`,
組件中的data必須是函數(shù)

當(dāng)我們定義這個(gè) 組件時(shí),你可能會發(fā)現(xiàn)它的 data 并不是像這樣直接提供一個(gè)對象:

data: {
  count: 0
}

取而代之的是,一個(gè)組件的 data 選項(xiàng)必須是一個(gè)函數(shù),因此每個(gè)實(shí)例可以維護(hù)一份被返回對象的獨(dú)立的拷貝:

data: function () {
  return {
    count: 0
  }
}

如果 Vue 沒有這條規(guī)則,所有模板都會共享一份數(shù)據(jù)。

解析 DOM 模板時(shí)的注意事項(xiàng)

有些 HTML 元素,諸如

    、
      、 和

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

      需要注意的是如果我們從以下來源使用模板的話,這條限制是不存在的:

      字符串 (例如:template: "...")
      單文件組件 (.vue)
      插槽 插槽內(nèi)容

      const component = {
        template: `
          
      //vue的默認(rèn)組件,放置插槽的地方
      `, data () { return { style: { width: "200px", height: "200px", border: "1px solid #aaa" }, value: "component value" } } } new Vue({ components: { CompOne: component }, el: "#root", data () { return { value: "123" } }, mounted () { }, template: `
      this is contne //傳遞插槽內(nèi)容
      ` })
      具名插槽

      有些時(shí)候我們需要多個(gè)插槽,可以進(jìn)行命名;

      import Vue from "vue"
      
      const component = {
        template: `
          
      //進(jìn)行插槽命名
      `, data () { return { style: { width: "200px", height: "200px", border: "1px solid #aaa" }, value: "component value" } } } new Vue({ components: { CompOne: component }, el: "#root", data () { return { value: "123" } }, mounted () { }, template: `
      this is header ///向指定的內(nèi)容 this is body
      ` })
      插槽的默認(rèn)內(nèi)容

      可以在 標(biāo)簽內(nèi)部指定默認(rèn)的內(nèi)容來做到這一點(diǎn)。

      如果父組件為這個(gè)插槽提供了內(nèi)容,則默認(rèn)的內(nèi)容會被替換掉。

      作用域插槽
      import Vue from "vue"
      
      const component = {
        template: `
          
      //向外傳遞的數(shù)據(jù)
      `, data () { return { style: { width: "200px", height: "200px", border: "1px solid #aaa" }, value: "component value" } } } new Vue({ components: { CompOne: component }, el: "#root", data () { return { value: "123" } }, mounted () { console.log(this.$refs.comp.value, this.$refs.span) //打印出組件實(shí)例和HTML標(biāo)簽 }, template: `
      {{value}} //此時(shí)沒有作用域,訪問到的不是組件內(nèi)的value,而是外部的value //添加作用域,組件內(nèi)部傳遞的數(shù)據(jù)都保存在props對象中 {{props.value}}
      ` })
      動態(tài)組件
      
      
      
          
          
          
          Document
      
      
          
      provide / inject 跨級組件通信

      這對選項(xiàng)需要一起使用,以允許一個(gè)祖先組件向其所有子孫后代注入一個(gè)依賴,不論組件層次有多深,并在起上下游關(guān)系成立的時(shí)間里始終生效。

      import Vue from "vue"
      
      const ChildComponent = {
        template: "
      child component:
      ", inject: ["yeye","value"], mounted () { console.log(this.$parent.$options.name) //上一級 console.log(this.yeye,this.value) //上上一級,接受到的數(shù)據(jù),打印出上上一級的vue實(shí)例和123 } } const component = { name: "comp", components: { ChildComponent }, template: `
      `, data () { return { style: { width: "200px", height: "200px", border: "1px solid #aaa" }, value: "component value", value2: "component222 value" } } } new Vue({ components: { CompOne: component }, provide () { //和data一樣,可以調(diào)用相應(yīng)的值,是一個(gè)對象或返回一個(gè)對象的函數(shù)。該對象包含可注入其子孫的屬性。 return { yeye: this, value:this.value } }, el: "#root", data () { return { value: "123" } }, mounted () { console.log(this.$refs.comp.value2, this.$refs.span) }, template: `
      {{props.value}}
      ` })

      provide 和 inject 綁定并不是可響應(yīng)的。這是刻意為之的。provide 和 inject 綁定并不是可響應(yīng)的。這是刻意為之的。

      import Vue from "vue"
      
      const ChildComponent = {
        template: "
      child component:{{data.value}}
      ", inject: ["yeye","data"], mounted () { console.log(this.$parent.$options.name) //上一級 console.log(this.yeye,this.value) //上一級 } } const component = { name: "comp", components: { ChildComponent }, // template: ` //
      //
      // //
      //
      // //
      //
      // `, template: `
      `, data () { return { style: { width: "200px", height: "200px", border: "1px solid #aaa" }, value: "component value", value2: "component222 value" } } } new Vue({ components: { CompOne: component }, provide () { //和data一樣,可以調(diào)用相應(yīng)的值 const data = {} // es5雙向綁定實(shí)現(xiàn)原理 Object.defineProperty(data, "value", { get: () => this.value, //獲取最新value,每次調(diào)用value相當(dāng)于get()方法 enumerable: true //可讀取 }) return { yeye: this, // value:this.value data } }, el: "#root", data () { return { value: "123" } }, mounted () { console.log(this.$refs.comp.value2, this.$refs.span) }, template: `
      {{props.value}}
      ` })

      provide 和 inject 主要為高階插件/組件庫提供用例。并不推薦直接用于應(yīng)用程序代碼中。

      渲染函數(shù) & JSX

      參考:渲染函數(shù)&JSX

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/96843.html

相關(guān)文章

  • vue入門筆記體系vue組件

    摘要:更推薦用和實(shí)現(xiàn)父子組件通信創(chuàng)建實(shí)例此時(shí)打印出組件繼承使用基礎(chǔ)構(gòu)造器,創(chuàng)建一個(gè)子類。包含組件選項(xiàng)的對象創(chuàng)建構(gòu)造器創(chuàng)建實(shí)例,并掛載到一個(gè)元素上。該對象包含可注入其子孫的屬性。和綁定并不是可響應(yīng)的。 組件注冊 關(guān)于組件名: *組件名可以是kebab-case (短橫線分隔命名)或者PascalCase (駝峰式命名) 當(dāng)使用 kebab-case (短橫線分隔命名) 定義一個(gè)組件時(shí),你也必...

    Neilyo 評論0 收藏0
  • Java學(xué)習(xí)路線總結(jié),搬磚工逆襲Java架構(gòu)師(全網(wǎng)最強(qiáng))

    摘要:哪吒社區(qū)技能樹打卡打卡貼函數(shù)式接口簡介領(lǐng)域優(yōu)質(zhì)創(chuàng)作者哪吒公眾號作者架構(gòu)師奮斗者掃描主頁左側(cè)二維碼,加入群聊,一起學(xué)習(xí)一起進(jìn)步歡迎點(diǎn)贊收藏留言前情提要無意間聽到領(lǐng)導(dǎo)們的談話,現(xiàn)在公司的現(xiàn)狀是碼農(nóng)太多,但能獨(dú)立帶隊(duì)的人太少,簡而言之,不缺干 ? 哪吒社區(qū)Java技能樹打卡?【打卡貼 day2...

    Scorpion 評論0 收藏0
  • vue入門筆記體系(一)vue實(shí)例

    摘要:就是實(shí)例中的對象當(dāng)前組件接收到的對象。當(dāng)前組件數(shù)的根實(shí)例如果當(dāng)前實(shí)例沒有父實(shí)例,此實(shí)例將會是其自己當(dāng)前實(shí)例的直接子組件。 vue實(shí)例 每個(gè) Vue 應(yīng)用都是通過用 Vue 函數(shù)創(chuàng)建一個(gè)新的 Vue 實(shí)例開始的: var vm = new Vue({ // 選項(xiàng) }) 當(dāng)創(chuàng)建一個(gè) Vue 實(shí)例時(shí),你可以傳入一個(gè)選項(xiàng)對象。作為參考,你也可以在 api/#選項(xiàng)-數(shù)據(jù) 文檔 中瀏覽完整的選...

    microelec 評論0 收藏0
  • vue入門筆記體系(二)vue生命周期

    摘要:此時(shí)還未有選項(xiàng)鉤子函數(shù)和間的生命周期完成后,會有一個(gè)判斷過程,判斷對象是否有選項(xiàng)。鉤子函數(shù)和鉤子函數(shù)間的生命周期當(dāng)發(fā)現(xiàn)中的數(shù)據(jù)發(fā)生了改變,會觸發(fā)對應(yīng)組件的重新渲染,先后調(diào)用和鉤子函數(shù)。和鉤子函數(shù)間的生命周期鉤子函數(shù)在實(shí)例銷毀之前調(diào)用。 vue生命周期 這是vue生命周期的圖示具體內(nèi)容:showImg(https://segmentfault.com/img/bV4xju?w=1200&...

    scola666 評論0 收藏0
  • vue入門筆記體系(五)vue指令

    摘要:指令指令帶有前綴,以表示它們是提供的特殊特性。添加事件偵聽器時(shí)使用模式。只當(dāng)事件是從偵聽器綁定的元素本身觸發(fā)時(shí)才觸發(fā)回調(diào)。差別在哪里將特性名轉(zhuǎn)換為從開始支持語法糖,會擴(kuò)展成一個(gè)更新父組件綁定值的偵聽器。 vue指令 指令帶有前綴 v-,以表示它們是 Vue 提供的特殊特性。 v-text {{msg}} v-html //渲染HTML文本,更新元素的 innerHTML 。注意:內(nèi)...

    myshell 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<