Vue学习笔记4.1 is方法,全局组件的data, Vue中操作DOM元素
2019-01-21 13:52
976 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/soulwyb/article/details/86572806
1.is方法
看如下情况
[code]<body> <div id="root"> <table> <row></row> <row></row> </table> </div> </body> <script> Vue.component('row', { template: "<tr><td>Hello World</td></tr>" }) var vm = new Vue({ el: '#root' }) </script>
<tr><td>跑到<table>之外了。这是因为html5标准要求特定标签中的标签元素也要是特定的,比如<select>中必须是<option> ,<ul>中一定要是<li>作为子标签。所以以上示例违反了html5的标准。就出现了如下bug。碰到这种情况就需要使用vue的is方法来处理。
is方法示例如下:
[code]<body> <div id="root"> <table> <tr is="row"></tr> <tr is="row"></tr> </table> </div> </body> <script> Vue.component('row', { template: "<tr><td>Hello World</td></tr>" }) var vm = new Vue({ el: '#root' }) </script>
在组建中,也经常会用data函数来存储数据。但会出现如下问题:
[code]<body> <div id="root"> <table> <tr is="row"></tr> <tr is="row"></tr> </table> </div> </body> <script> Vue.component('row', { data: { content: "Hello World" }, template: "<tr><td>{{content}}</td></tr>" }) var vm = new Vue({ el: '#root' }) </script>
这是因为全局子组件中。data必须使用函数返回。以保证数据的独立性。因为子组件不会像根组件一样只调用一次。有可能会调用很多次。所以用函数返回的方法可以保证每个地方调用的数据是独立的
[code]<body> <div id="root"> <table> <tr is="row"></tr> <tr is="row"></tr> </table> </div> </body> <script> Vue.component('row', { data: function() { return { content: 0 } }, template: '<tr @click="handleClick"><td>{{content}}</td></tr>', methods: { handleClick: function(){ this.content ++; } } }) var vm = new Vue({ el: '#root' }) </script>
3.操作DOM元素----ref
虽然Vue是一直提倡不直接操作DOM 但是有些特殊场景下 咋们又不得不操作DOM 这时候就需要用ref来做处理了
比如以下例子:(该例子是通过点击上面两个数字,自动算出总数)
[code]<body> <div id="root"> <table> <tr ref="one" is="row" @change="handleChangeClick"></tr> <tr ref="two" is="row" @change="handleChangeClick"></tr> <tr><td>{{sum}}</td></tr> </table> </div> </body> <script> Vue.component('row', { data: function() { return { content: 0 } }, template: '<tr @click="handleClick"><td>{{content}}</td></tr>', methods: { handleClick: function(){ this.content ++; this.$emit('change') } } }) var vm = new Vue({ el: '#root', data: { sum: 0 }, methods: { handleChangeClick: function() { this.sum = this.$refs.one.content + this.$refs.two.content } } }) </script>
实现:
相关文章推荐
- ext4 学习笔记(九)[dom操作一 获取元素](白鹤翔第一季)
- jquery学习笔记-jQuery操纵DOM元素属性 attr()和removeAtrr()方法
- Vue 学习笔记 — 无法避免的dom操作
- learning jQuery 学习笔记十一(+jQuery 1.4.1 API)-- DOM操作-基于命令改变页面 ----移动元素
- JQuery学习笔记(二)——简单操作+data方法
- web进阶之jQuery操作DOM元素&&MySQL记录操作&&PHP面向对象学习笔记
- vue.js 中 :is 与 is 的用法和区别,学习全局与局部注册组件
- learning jQuery 学习笔记十三(+jQuery 1.4.1 API)-- DOM操作-基于命令改变页面 ----复制元素及其它
- AJAX 学习笔记(5) 处理XML文档的DOM元素属性和遍历DOM元素方法
- 【jQuery学习笔记---------DOM操作复制元素】
- SilverLight学习笔记--Silverlight中操作DOM元素
- ESXi(ESXi 4.1)相关问题解决方法和操作学习笔记
- jQuery学习笔记(二)—— 操作DOM元素
- learning jQuery 学习笔记十二(+jQuery 1.4.1 API)-- DOM操作-基于命令改变页面 ----包装元素
- javascript学习笔记3:DOM操作之选取文档元素
- javascript学习笔记(九):DOM操作HTML的各种方法使用
- Python学习笔记九:列表(1)--列表元素介绍及创建方法
- jQuery学习笔记--JqGrid相关操作 方法列表 备忘 重点讲解(超重要)
- 有关DataForm组件的研究_基础知识和实现服务端批量CURD——Silverlight学习笔记[23]
- jQuery学习笔记--JqGrid相关操作 方法列表 备忘 重点讲解(超重要)