组件
<body>
<div id="app">
<aaa/>
</div>
</body>
<script src="../vue.js"></script>
<script>
Vue.config.productionTip = false;
// 创建组件
const school = Vue.extend({
template:`
<div>
<h1>我是一个school组件</h1>
<h1>我是{{userName}}</h1>
<h1>我是{{func1()}}</h1>
</div>
`,
data() {
return {
userName:"张三"
}
},
methods:{
func1(){
return 100;
}
}
})
// 注册组件
// Vue.component("abc",school);
var vm = new Vue({
el:"#app",
data() {
return {
}
},
components:{
aaa:school
},
methods: {
},
})
</script>
<template>
<div>
<h1>我是school组件</h1>
<h1>学校名称:{{msg}}</h1>
</div>
</template>
<script>
export default {
name:"SchoolS",
data() {
return {
msg:"xxxxxxxxxx学院"
}
},
}
</script>
<style>
</style>
单个组件的使用
- 可以使用小写和大写情况下,首字母都会转换为大写
- my-school和mySchool都会转换为同样的格式MySchool,但是mySchool只能在脚手架环境使用
- 使用的组件名可以不和组件定义的名字相同,组件名字可以自定义
注意规范:
组件取名最好不要和已有的标签相同
不在脚手架环境下使用这种格式不会再运行之后的代码
Vue.extend()方法本质就是实例化VueComponent构造函数
<style>
#app{
width: 100%;
height: 100vh;
background-color: pink;
}
nav{
height: 100px;
width: 100%;
background-color: orange;
}
main{
height: 500px;
width: 100%;
background-color: rgb(0, 213, 255);
}
footer{
height: 500px;
width: 100%;
background-color: rgb(21, 207, 151);
}
</style>
</head>
<body>
<div id="app">
<navq></navq>
<mainq></mainq>
<footerq></footerq>
</div>
</body>
<script src="../vue.js"></script>
<script>
Vue.config.productionTip = false;
const navq=Vue.extend({
template:`
<nav></nav>
`,
mounted(){
console.log(this);
}
}
)
const mainq=Vue.extend({
template:`
<main>
</main>
`,
components:{
}
})
const footerq=Vue.extend({
template:`
<footer>
<mainq></mainq>
</footer>
`,
components:{
navq
}
}
)
Vue.component("mainq",mainq);
var vm = new Vue({
el:"#app",
data() {
return {
}
},
components:{
navq,
footerq,
},
mounted(){
console.log(this);
}
})
</script>
组件注册两种方式
1.全局注册Vue.component("mainq",mainq);
1.局部注册components:{ }
两种方式的区别
全局注册 只要注册一次,在任何组件都可以使用
局部注册 在变量a中注册,就只能在a中使用组件
// 可配置的变量
const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
// 配置入口文件地址
pages: {
index: {
// page 的入口
entry: 'src/main.js',
// 模板来源
template: 'public/index.html',
},
},
transpileDependencies: true,
// 关闭语法检查
lintOnSave:false
})
全局
- 自定义组件Vue.component
- 自定指令Vue.directive
- 3.watch监听vm.$watch
- 过滤器Vue.filter
- 绑定容器vm.$mount
<script>
const mixin = {
data(){
return{
}
},
methods: {
}
}
export default {
name:"MyDay01",
mixins:[mixin],
data() {
return {
c:100,
d:200,
}
},
methods: {
},
created() {
console.log(this);
console.log(this.$data);
console.log(this.userName);
console.log(this.sum());
},
// props父向子传递值
// 只接收值
// props:["name","age"],
// 限制类型
props:{
name:String,
age:Number,
bol:Boolean
}
// 限制类型,必要性,默认值
props:{
name:{
type:String,
required:true,
default:"李四"
},
age:{
type:Number,
required:true,
default:99
},
bol:{
type:Boolean,
required:true,
default:false
}
}
}
</script>