一、在表格中直接使用组件,结构会出现错误如下代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="../vue.js"></script>
</head>
<body>
<div id="app">
<table>
<tbody>
<!--使用模板template制作表格 在tr标签中加入 is 绑定row组件,在表格时使用-->
<row></row>
<row></row>
<row></row>
</tbody>
</table>
</div>
<script type="text/javascript">
Vue.component('row',{
template:"<tr><td>this is a row </td></tr>"
});
var vm = new Vue({
el: "#app"
})
</script>
</body>
</html>
获得的结果如下图所示
tr 显示的结果并没有按我们的预期显示到 tbody标签里。这样显示 是错误 的。正确的这样写
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="../vue.js"></script>
</head>
<body>
<div id="app">
<table>
<tbody>
<!--使用模板template制作表格 在tr标签中加入 is 绑定row组件,在表格时使用-->
<tr is="row"></tr>
<tr is="row"></tr>
<tr is="row"></tr>
</tbody>
</table>
</div>
<script type="text/javascript">
Vue.component('row',{
template:"<tr><td>this is a row </td></tr>"
});
var vm = new Vue({
el: "#app"
})
</script>
</body>
</html>
改造后的代码显示结果如下 :
遇到以下几种情况都可以使用 is ="row" 在标签属性中来表示。像ul ol table selectf 标签中都可以使用
<tbody>
<!--使用模板template制作表格 在tr标签中加入 is 绑定row组件,在表格时使用-->
<tr is="row"></tr>
<tr is="row"></tr>
<tr is="row"></tr>
</tbody>
<ul>
<li is="row"></li>
<li is="row"></li>
<li is="row"></li>
</ul>
<ol>
<li is="row"></li>
<li is="row"></li>
<li is="row"></li>
</ol>
<select name="" id="">
<option is="row" value=""></option>
<option is="row" value=""></option>
<option is="row" value=""></option>
</select>
二、在子组件中定义数据时,要使用函数返回数据,不然会报错
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>组件使用中的细节点</title>
<script src="../vue.js"></script>
</head>
<body>
<div id="app">
<table>
<tbody>
<!--使用模板template制作表格 在tr标签中加入 is 绑定row组件,在表格时使用-->
<tr is="row"></tr>
<tr is="row"></tr>
<tr is="row"></tr>
</tbody>
</table>
</div>
<script type="text/javascript">
Vue.component('row',{
//在子组件中定义数据时,data必须是个函数,不然就会报错了。
data:function() {
return {
content:"this is Content"
}
},
template:"<tr><td>{{content}}</td></tr>"
})
var vm = new Vue({
el: "#app"
})
</script>
</body>
</html>
三、 子组件中使用数据模板和函数的用法
子组件实现,计数器的功能 点击数据自动增加数字
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="../vue.js"></script>
</head>
<body>
<div id="app">
<counter></counter>
<counter></counter>
</div>
<script >
Vue.component("counter",{
template:'<div @click="handleClick">{{number}}</div>',
data:function() {
return {
number:0
}
},
methods:{
handleClick:function() {
this.number ++
}
}
})
var vm = new Vue({
el:"#app"
})
</script>
</body>
</html>
使用发布订阅功能 ,实现和的计数:涉及到子组件向父组件传值 this.$emit("change")
父组件<counter @change="handleChange"></counter> 监听changes事件的发生。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="../vue.js"></script>
</head>
<body>
<div id="app">
<!-- 增加引用 ref ="one" 和change事件监听 -->
<counter ref = "one" @change="handleChange"></counter>
<counter ref = "two" @change="handleChange"></counter>
<div>{{total}}</div>
</div>
<script >
Vue.component("counter",{
//绑定handleClick事件
template:'<div @click="handleClick">{{number}}</div>',
data:function() {
return {
number:0
}
},
methods:{
handleClick:function() {
this.number ++;
this.$emit("change")
}
}
})
var vm = new Vue({
el:"#app",
data:{
total: 0
},
methods:{
handleChange:function() {
// alert("change")
// console.log(this.$refs.one.number);
// console.log(this.$refs.two.number);
this.total=this.$refs.one.number + this.$refs.two.number;
}
}
})
</script>
</body>
</html>
子组件使用引用的方法在父组件中更新total总计数器。