- 引入vue.js
- 编写一个div标签,并用new Vue进行初始化
- 在这个标签内写一个input框,并绑定info属性
- 写一个button按钮,绑定一个点击事件
- 基于li封装一个todo-item组件,里边写一个属性value,绑定一个叫item-class的class属性
- 在ul中使用todo-item组件,将list中的值遍历出来赋给todo-item
- 设定全局class属性的color为red
完整代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>封装组件</title>
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.10/dist/vue.js"></script>
</head>
<body>
<div id="app">
<input type="text" v-model="info">
<button @click="handleClick">添加</button>
<div>
<ul>
<todo-item v-for="item in list" :value="item"></todo-item>
</ul>
</div>
</div>
<script>
Vue.component("todo-item", {
props: ['value'],
template: '<li class="item-class">{{value}}</li>'
});
new Vue({
el: "#app",
data() {
return {
info: '', // 输入框信息
list: [],
}
},
methods: {
handleClick() {
this.list.push(this.info);
this.info = '';
}
}
});
</script>
<style>
.item-class {
color: red;
}
</style>
</body>
</html>
运行效果如下:
Vue.component的缺点:
- 全局定义:强制要求每个component中的命名不能重复
- 字符串模板:缺乏语法高亮,在html有多行的时候,需要用到丑陋的\
- 不支持css:意味着当html与javascript组件化时,css明显被遗漏
- 没有构建步骤,限制只能使用html和es5 javascript,而不能使用预处理器,如pug(formerly jade)和babel