一、组件:
组件的出现,就是为了拆分Vue实例的代码量的,能够让我们以不同的组件,来划分不同的功能模块,将来我们需要什么样的功能,就可以去调用相应的组件即可。
二、组件和模块:
1、模块化:是从代码逻辑的角度进行划分的;方便代码分层开发,保证每个功能模块的职能单一;
2、组块化:是从UI界面的角度进行划分的;前端的组块化,方便UI组件的重用。
三、定义全局组件的方式:
三种方式:
<!DOCTYPEhtml>
<htmllang="en">
<head>
<metacharset="UTF-8"/>
<metaname="viewport"content="width=device-width,initial-scale=1.0"/>
<metahttp-equiv="X-UA-Compatible"content="ie=edge"/>
<title>组件</title>
<scriptsrc="./lib/vue.js"></script>
</head>
<body>
<divid="app">
<!--如果要使用组件,直接把组件的名称,以HTML标签的形式,引入到页面中即可-->
<mycom1></mycom1>
</div>
<!--3.在被控制的#app外面,使用template元素,定义组件的HTML模板结构-->
<templateid="tmp1">
<div>
<h1>
这是通过
template元素,在外部定义的组件结构,这个方式,有代码的智能提示和高亮
</h1>
<h4>好用,不错</h4>
</div>
</templateid="tmp2">
<h2>
这是私有的login组件
</h2>
<template>
</template>
<script>
Vue.component("mycom1",{
template:"#tmp1"
});
//1.1使用Vue.extend来创建全局的Vue组件
//varcom1=Vue.extend({
//通过template属性,指定了组件要展示的HTML结构
//template:"<h3>这是使用Vue.extend创建的组件<h3>"
//});
//1.2使用Vue.component('组件的名称',创建出来的组件模板对象)
//如果使用Vue.component定义全局组件的时候,组件的名称使用了驼峰命名,则在引用组件的时候,
//需要把大写的驼峰改成小写的字母,同时,两个单词之前,使用-连接;
//如果不使用驼峰,则直接拿名称来使用即可;
//Vue.component("mycom1",com1);
//2.Vue.component第一个参数:组件的名称,将来在引用组件的时候,就是一个标签的形式来引入它的
//第二个参数:Vue.extend创建的组件,其中template就是组件将来要展示的HTML内容。
//相当于第一种方式的简写
//Vue.component(
//"mycom1",
//Vue.extend({
////注意:不论是哪种方式创建出来的组件,组件的template属性指向的模板内容,必须有且只能有唯一的一个元素
//template:
//"<div><h3>这是使用Vue.extend创建的组件<h3><span>123</span></div>"
//})
//);
varvm=newVue({
el:"#app",
data:{},
methods:{},
filters:{},
directives:{},
components:{//定义实例的内部私有组件的
login:{
template:"#tmp2"
}
}
});
</script>
</body>
</html>
四、定义私有的组件:如上图代码中的tmp2;
五、组件内可以有data数据,但其是一个有return的function方法。
<!DOCTYPEhtml>
<htmllang="en">
<head>
<metacharset="UTF-8"/>
<metaname="viewport"content="width=device-width,initial-scale=1.0"/>
<metahttp-equiv="X-UA-Compatible"content="ie=edge"/>
<title>组件</title>
<scriptsrc="./lib/vue.js"></script>
</head>
<body>
<divid="app">
<!--如果要使用组件,直接把组件的名称,以HTML标签的形式,引入到页面中即可-->
<mycom1></mycom1>
</div>
<script>
Vue.component("mycom1",{
template:"<h1>这是全局组件-----{{msg}}</h1>",
data:function(){
return{
msg:"这是组件的中data定义的数据"
};
}
});
varvm=newVue({
el:"#app",
data:{},
methods:{},
filters:{},
directives:{}
});
</script>
</body>
</html>
六、多个组件:
<!DOCTYPEhtml>
<htmllang="en">
<head>
<metacharset="UTF-8"/>
<metaname="viewport"content="width=device-width,initial-scale=1.0"/>
<metahttp-equiv="X-UA-Compatible"content="ie=edge"/>
<title>组件</title>
<scriptsrc="./lib/vue.js"></script>
</head>
<body>
<divid="app">
<counter></counter>
<hr/>
<counter></counter>
<hr/>
<counter></counter>
<!--如果要使用组件,直接把组件的名称,以HTML标签的形式,引入到页面中即可-->
</div>
<templateid="tmp1">
<div>
<inputtype="button"value="+1"@click="increment"/>
<h3>{{count}}</h3>
</div>
</template>
<script>
vardataObj={count:0};
//这是一个计数器的组件,身上有个按钮,每当点击按钮,让data中的count值+1
Vue.component("counter",{
template:"#tmp1",
data:function(){
return{
count:0
};
},
methods:{
increment(){
this.count++;
}
}
});
varvm=newVue({
el:"#app",
data:{},
methods:{},
filters:{},
directives:{}
});
</script>
</body>
</html>
如果您觉得本文的内容对您的学习有所帮助:
关键字:
jQuery