Files
ClassContent/历届学生/front-end-team/每天课程/2020-04-12/component.html
2024-09-27 02:06:13 +08:00

118 lines
2.9 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>组件</title>
</head>
<body>
<div class="app">
<lb-header text="测试" :list-arr="newsList" @type="getData">
<template #text>
<span>text</span>
</template>
<template #right>
<span>right</span>
</template>
</lb-header>
<div class="content">内容部分</div>
<lb-footer></lb-footer>
</div>
</body>
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
<script>
// var a = require("./index.js")
// 父子关系
// 父组件 ——> 子组件
// 基本数据类型 props
// 传html props 插槽
// 别名插槽
// 作用域插槽
// 子组件 ——> 父组件
// $emit
// 组件????
// 全局组件
Vue.component('lb-header', {
// 存放html代码
template: `
<div class="header">
<h2>{{text}}</h2>
<ul>
<li v-for="item,index in listArr" @click="liClick(item)">{{item.title}}</li>
</ul>
<div class="right">
<slot name="right"></slot>
</div>
<div class="text">
<slot name="text"></slot>
</div>
</div>
`,
// props: [ 'text' ],
props: {
text: {
default: '默认参数',
type: String,
required: true
},
listArr: {
default: () => [],
type: Array
}
},
data() {
return {
}
},
methods: {
liClick(item) {
this.$emit("type", item)
}
}
});
// 局部组件
var footer = {
template: `
<div class="footer">底部</div>
`,
data () {
return {}
},
methods: {
}
}
var vm = new Vue({
el: '.app',
data: {
test: '你好',
title: '首页',
newsList: [
{ id: 1, title: '新闻1', href: 'https://www.baidu.com/' },
{ id: 2, title: '新闻2', href: 'https://www.baidu.com/' },
{ id: 3, title: '新闻3', href: 'https://www.baidu.com/' },
]
},
mounted() {
console.log("mounted");
console.log(this.test);
},
methods: {
getData(item) {
console.log(item);
}
},
components: {
'lb-footer': footer
}
})
</script>
</html>