118 lines
2.9 KiB
HTML
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> |