VUE---组件
来源:互联网 发布:松本行弘 知乎 编辑:程序博客网 时间:2024/05/02 05:06
一、组件深入
<v-header></v-header>
var Header={ /*1.定义组件 */
template:'<h1 @click="run()">这是一个头部组件11--{{name}}--{{msg}}</h1>',
data:function(){ /*组件里面定义数据的方式*/
return {
name:'李四',
msg:'this is a component'
}
},methods:{
run(){
this.name='王五';
alert('this is a Header component run');
}
}
}
vue实例中注册组件
components:{
'v-header':Header
}二、组件模板
方法一:使用script type类型为x-template 设置id
<script type="x-template" id="header">
<div class="header">
<h2>这是标题</h2>
<p>{{msg}}</p>
<button @click="run()">这是一个按钮</button>
</div>
</script>
//注意:模板里面所有的东西要被根元素包裹起来
var Header={ /*定义组件*/
template:'#header',
data: function () {
return {
msg:'这是header组件内容'
}
},
methods:{
run:function(){
this.msg='这是header组件内容-我是改变后的值';
alert('run');
}
}
};
注册组件
显示组件
方法二:使用<template id="footer"></template>
<template id="footer">
<div class="footer">
<h2>这是底部组件的标题</h2>
<p>这是一个底部组件的内容</p>
<p>这是一个底部组件的内容</p>
</div>
</template>
注册组件
显示组件
三、父子组件
<template id="header">
<div>
<h2>我是头部组件11</h2>
<br/>
<hr/>
<v-nav></v-nav>
</div>
</template>
<template id="nav">
<div>
<h2>我是Nav组件</h2>
</div>
</template>
components:{
'v-header':{
template:'#header',
components:{ /*组件里面嵌套组件*/
'v-nav':{
template:'#nav',
}
}
}
}
四、父子组件传值--props
<!--父亲组件给子组件传数据-->---header
<v-nav :msg="msg" :n="name"></v-nav>
nav--
<template id="nav">
<div>
<h2>我是Nav组件-----{{msg}}--{{n}}</h2>
</div>
</template>
components:{
'v-header':{
template:'#header',
data:function(){
return{
msg:'header组件的数据',
name:'我是父亲组件的name'
}
},
components:{
'v-nav':{
props:['msg','n'], /*子组件接收数据*/
template:'#nav'
}
}
}
}
五、父子组件传值--props--验证
<!--父亲组件给子组件传数据-->
<v-nav :msg="msg" :num="num" :my-num="aa"></v-nav>
data:function(){
return{
msg:'header组件的数据',
//num:10
num:'这是一个num类型',
aa:10
}
},
'v-nav':{
props:['msg','n'], /*子组件接收数据*/
template:'#nav'
}
props:{
msg:String, /*msg必须是 字符串类型*/
num:Number,
//myNum:Number
myNum:{ /*驼峰方式接收数据 传值的时候要注意 my-num*/
type:Number,
default:101
}
},
六、子组件給父组件传值
<template id="header">
<div>
<h2>我是头部组件---{{msg}}--{{a}}</h2>
<br/>
<hr/>
<v-nav :m="msg" @to-parent="getChildData"></v-nav>
</div>
</template>
<template id="nav">
<div>
<h2>我是Nav组件--{{m}}</h2>
<br/>
<br/>
<button @click="send()">这是nav组件的button,点击给父组件传值</button>
</div>
</template>
components:{
'v-header':{
template:'#header',
data:function(){
return {
msg:'这是父亲组件的数据',
a:''
}
},methods:{
getChildData:function(msg){ //data就是子组件广播过来的数据
//alert(msg);
this.a=msg;
}
},
components:{
'v-nav':{
props:['m'],
template:'#nav',
data:function(){
return {
msg:'这是子组件的数据1111'
}
},
methods:{
send:function(){
// $emit
//alert('111');
//this.msg 就是data里面的msg
this.$emit('to-parent',this.msg); /*1.子组件给父亲组件广播数据*/
}
}
}
}
}
}
七、非父子组件传值,使用监听
<v-a></v-a>
<v-b></v-b>
<v-c></v-c>
//定义一个空的实例对象
var Event=new Vue();
var A={
template:'#a',
data:function(){
return {
msg:'这是a组件的数据'
}
},
methods:{
send(){
Event.$emit('aSend',this.msg); /*广播数据*/
}
}
};
var B={
template:'#b',
data:function(){
return {
msg:'这是B组件的数据11'
}
},
methods:{
send:function(){
Event.$emit('bSend',this.msg); /*广播数据*/
}
}
}
var C={
template:'#c',
data:function(){
return {
m:'',
b:''
}
},
mounted:function(){
/*接收广播*/
var _that=this;
Event.$on('aSend',function(msg){
_that.m=msg;
});
Event.$on('bSend',function(msg){
_that.b=msg;
})
}
}
new Vue({
el:'#box',
data:{
msg:'this is vue'
},
components:{
'v-a':A,
'v-b':B,
'v-c':C
}
});
八、动态组件
<div id="box">
{{msg}}
<button @click="a='aaa'">aaa组件</button>
<button @click="a='bbb'">bbb组件</button>
<component :is="a"></component>
</div>
<template id="aaa">
<div>
<h2>这是aa组件的标题</h2>
<p @click="run">这是aa组件的内容</p>
</div>
</template>
var vm=new Vue({
el:'#box',
data:{
msg:'this is a vue',
a:'bbb'
},
components:{
'aaa':{
template:'#aaa',
methods:{
run:function(){
alert('这是aaa组件');
}
}
},
'bbb':{
template:'<div>这是bbb组件</div>'
}
}
});
<v-header></v-header>
var Header={ /*1.定义组件 */
template:'<h1 @click="run()">这是一个头部组件11--{{name}}--{{msg}}</h1>',
data:function(){ /*组件里面定义数据的方式*/
return {
name:'李四',
msg:'this is a component'
}
},methods:{
run(){
this.name='王五';
alert('this is a Header component run');
}
}
}
vue实例中注册组件
components:{
'v-header':Header
}二、组件模板
方法一:使用script type类型为x-template 设置id
<script type="x-template" id="header">
<div class="header">
<h2>这是标题</h2>
<p>{{msg}}</p>
<button @click="run()">这是一个按钮</button>
</div>
</script>
//注意:模板里面所有的东西要被根元素包裹起来
var Header={ /*定义组件*/
template:'#header',
data: function () {
return {
msg:'这是header组件内容'
}
},
methods:{
run:function(){
this.msg='这是header组件内容-我是改变后的值';
alert('run');
}
}
};
注册组件
显示组件
方法二:使用<template id="footer"></template>
<template id="footer">
<div class="footer">
<h2>这是底部组件的标题</h2>
<p>这是一个底部组件的内容</p>
<p>这是一个底部组件的内容</p>
</div>
</template>
注册组件
显示组件
三、父子组件
<template id="header">
<div>
<h2>我是头部组件11</h2>
<br/>
<hr/>
<v-nav></v-nav>
</div>
</template>
<template id="nav">
<div>
<h2>我是Nav组件</h2>
</div>
</template>
components:{
'v-header':{
template:'#header',
components:{ /*组件里面嵌套组件*/
'v-nav':{
template:'#nav',
}
}
}
}
四、父子组件传值--props
<!--父亲组件给子组件传数据-->---header
<v-nav :msg="msg" :n="name"></v-nav>
nav--
<template id="nav">
<div>
<h2>我是Nav组件-----{{msg}}--{{n}}</h2>
</div>
</template>
components:{
'v-header':{
template:'#header',
data:function(){
return{
msg:'header组件的数据',
name:'我是父亲组件的name'
}
},
components:{
'v-nav':{
props:['msg','n'], /*子组件接收数据*/
template:'#nav'
}
}
}
}
五、父子组件传值--props--验证
<!--父亲组件给子组件传数据-->
<v-nav :msg="msg" :num="num" :my-num="aa"></v-nav>
data:function(){
return{
msg:'header组件的数据',
//num:10
num:'这是一个num类型',
aa:10
}
},
'v-nav':{
props:['msg','n'], /*子组件接收数据*/
template:'#nav'
}
props:{
msg:String, /*msg必须是 字符串类型*/
num:Number,
//myNum:Number
myNum:{ /*驼峰方式接收数据 传值的时候要注意 my-num*/
type:Number,
default:101
}
},
六、子组件給父组件传值
<template id="header">
<div>
<h2>我是头部组件---{{msg}}--{{a}}</h2>
<br/>
<hr/>
<v-nav :m="msg" @to-parent="getChildData"></v-nav>
</div>
</template>
<template id="nav">
<div>
<h2>我是Nav组件--{{m}}</h2>
<br/>
<br/>
<button @click="send()">这是nav组件的button,点击给父组件传值</button>
</div>
</template>
components:{
'v-header':{
template:'#header',
data:function(){
return {
msg:'这是父亲组件的数据',
a:''
}
},methods:{
getChildData:function(msg){ //data就是子组件广播过来的数据
//alert(msg);
this.a=msg;
}
},
components:{
'v-nav':{
props:['m'],
template:'#nav',
data:function(){
return {
msg:'这是子组件的数据1111'
}
},
methods:{
send:function(){
// $emit
//alert('111');
//this.msg 就是data里面的msg
this.$emit('to-parent',this.msg); /*1.子组件给父亲组件广播数据*/
}
}
}
}
}
}
七、非父子组件传值,使用监听
<v-a></v-a>
<v-b></v-b>
<v-c></v-c>
//定义一个空的实例对象
var Event=new Vue();
var A={
template:'#a',
data:function(){
return {
msg:'这是a组件的数据'
}
},
methods:{
send(){
Event.$emit('aSend',this.msg); /*广播数据*/
}
}
};
var B={
template:'#b',
data:function(){
return {
msg:'这是B组件的数据11'
}
},
methods:{
send:function(){
Event.$emit('bSend',this.msg); /*广播数据*/
}
}
}
var C={
template:'#c',
data:function(){
return {
m:'',
b:''
}
},
mounted:function(){
/*接收广播*/
var _that=this;
Event.$on('aSend',function(msg){
_that.m=msg;
});
Event.$on('bSend',function(msg){
_that.b=msg;
})
}
}
new Vue({
el:'#box',
data:{
msg:'this is vue'
},
components:{
'v-a':A,
'v-b':B,
'v-c':C
}
});
八、动态组件
<div id="box">
{{msg}}
<button @click="a='aaa'">aaa组件</button>
<button @click="a='bbb'">bbb组件</button>
<component :is="a"></component>
</div>
<template id="aaa">
<div>
<h2>这是aa组件的标题</h2>
<p @click="run">这是aa组件的内容</p>
</div>
</template>
var vm=new Vue({
el:'#box',
data:{
msg:'this is a vue',
a:'bbb'
},
components:{
'aaa':{
template:'#aaa',
methods:{
run:function(){
alert('这是aaa组件');
}
}
},
'bbb':{
template:'<div>这是bbb组件</div>'
}
}
});
0 0
- vue 组件
- Vue组件
- vue 组件
- vue组件
- Vue组件
- VUE---组件
- Vue组件
- Vue 组件
- vue组件
- Vue-组件
- vue-组件
- vue组件
- vue 组件
- vue组件
- Vue组件
- 【Vue.js】-Vue.js组件
- 【Vue】详解Vue组件系统
- 【Vue】详解Vue组件系统
- 安卓使用Textview做跑马灯出现滚动重复跳动问题
- SafeSEH Exploit——利用未启用SafeSEH的DLL
- 是否减少活动主窗口大小以便腾出空间放软键盘
- java 内存模型
- volatile 关键字不具备原子性
- VUE---组件
- 初识Cordova
- [POJ1635]Subway tree systems 判断有根树的同构 有根树哈希
- 开启HiDPI
- 《Java 编程思想》学习小结 (一)
- Servlet工作原理解析
- 摄像机模型,畸变模型及畸变图像的矫正
- Linux GCC常用命令
- 使用snmp4j实现Snmp功能(一)