<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
vue.js元件之H5頁面,DOM標籤或者元件中,通過ref="自定義name名稱"參照的細節點
vue不建議我們在程式碼裡面操作DOM,但是,在處理一些極其複雜的動畫效果,不操作DOM,單單靠vue的資料繫結是無法完成實際需求的效果的。這就需要我們必須操作DOM。如何操作呢?
下面我們給一個需求:當點選div的時候,div裡面的內容被列印出來。
1.首先起一個參照的名字,比如hello:
ref='hello'
通過參照名稱拿到該ref對應DOM裡面的內容。
<body> <div id="app"> <div ref="hello" @click="handleClick" > hello , 通過ref命名參照 操作DOM元素 ! </div> </div> <script> var app = new Vue({ el: '#app', methods: { handleClick: function() { alert(this.$refs.hello.innerHTML); } } }) </script> </body>
注意:this.$refs指頁面所有參照。
2.如果是參照元件呢?
我們先看一段程式碼:
<body> <div id="app"> <counter></counter> <counter></counter> </div> <script> Vue.component('counter', { template: '<button @click="handleClick">{{number}}</button>', data: function() { return { number: 0 } }, methods: { handleClick: function() { this.number ++; } } }) var app = new Vue({ el: '#app', }) </script> </body>
下面我們再給一個需求:數位的求和運算。
全部程式碼如下:
<body> <div id="app"> <counter ref="name2" @change="handleChange"></counter> <counter ref="name3" @change="handleChange"></counter> <div>{{total}}</div> </div> <script> //子元件 Vue.component('counter', { template: '<button @click="handleClick">{{number}}</button>', data: function() { return { number: 0 } }, methods: { handleClick: function() { this.number ++; this.$emit('change')//父元件中監聽變化 } } }) //父元件 var app = new Vue({ el: '#app', data: { total: 0 }, methods: { handleChange: function() { console.log(this.$refs.name2.number); console.log(this.$refs.name3.number); this.total = this.$refs.name2.number + this.$refs.name3.number; } } }) </script> </body>
注意:
this.$refs.name2是個物件!
這裡使用了父子通訊$emit(),不懂沒關係,可以翻典籍或檢視對應的講解部落格。
ref被用來給元素或子元件註冊參照資訊。參照資訊將會註冊在父元件的$refs物件上。如果在普通的DOM元素上使用,參照指向的就是DOM元素;如果用在子元件上,參照就指向元件範例。(可用於存取子元件範例或子元素)
<p ref='p'>hello</p> <child-component ref='child'></child-component>
當v-for用於元素或元件的時候,參照的資訊將是包含DOM節點或元件範例的陣列。
注意:因為ref本身是作為渲染結果被建立的,在初始渲染的時候你還不能存取它們,因為它們還不存在。
參照ref參照頁面上的DOM元素:
點選按鈕後效果如圖:
要使用 ref 參照頁面上的元件範例:父元件存取子元件範例
RefCom1元件:
子元件RefCom2:
實現效果:
通過布林值 inputVisible 來控制元件中的文字方塊與按鈕的按需切換,希望文字方塊顯示出來後立即獲得焦點。
補充: this.$nextTick(cb)方法
元件的$nextTick(callback)方法,會把callback回撥函數推遲到下一個DOM更新週期之後執行。通俗講,就是等元件的DOM非同步地重新渲染完成後,再執行callback回撥函數,從而能保證callback回撥函數可以操作到最新的DOM元素。
編譯作用域:父元件模板的所有東西都會在父級作用域內編譯,子元件模板的所有東西都會在子級作用域內編譯。
插槽(slot):是vue為元件的封裝者提供的能力。允許在封裝元件時,把不確定的,希望由使用者指定的部分定義為插槽。插槽將父元件的內容與子元件的模板相混合,從而彌補了檢視的不足。
如果父元件沒有插入內容,那麼slot的內容就作為預設出現;若父元件插入了內容,則slot的內容將被插入的內容替換掉。
在封裝元件時,可以通過<slot>元素定義插槽,從而為使用者與理由內容預留位置。匿名插槽(預設插槽),有且只有一個。
例如:
子元件:
父元件:
補充:
(1)如果在封裝元件時沒有預留任何<slot>插槽,則使用者提供的內容都會被丟棄。
(2)後備內容:如果沒有為插槽提供內容,那麼後備內容會生效。
如果在封裝元件時需要預留多個插槽節點,則需要為每個 <slot> 插槽指定具體的 name 名稱。這種帶有具體名稱的插槽叫做“具名插槽”。
例如:
SlotSon元件:
SlotFather元件:
在封裝元件的過程中,可以為預留的<slot>插槽繫結props資料,這種帶有props資料的<slot>叫做“作用域插槽”。
例如:
SlotSon2元件:(通過插槽給父元件傳遞資料)
SlotFather元件:接收插槽傳過來的資料,賦給插槽內容
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45