接上篇文章,分享动力节点老杜全新版Vue教程笔记
学习の地止:https://www.bilibili.com/video/BV17h41137i4
3 Vue组件化
3.1 什么是组件
- 传统方式开发的应用
一个网页通常包括三部分:结构(HTML)、样式(CSS)、交互(JavaScript)

传统应用存在的问题:
- 关系纵横交织,复杂,牵一发动全身,不利于维护。
- 代码虽然复用,但复用率不高。
- 组件化方式开发的应用

使用组件化方式开发解决了以上的两个问题:
- 每一个组件都有独立的js,独立的css,这些独立的js和css只供当前组件使用,不存在纵横交错。更加便于维护。
- 代码复用性增强。组件不仅让js css复用了,HTML代码片段也复用了(因为要使用组件直接引入组件即可)。
- 什么是组件?
- 组件:实现应用中局部功能的代码和资源的集合。凡是采用组件方式开发的应用都可以称为组件化应用。
- 模块:一个大的js文件按照模块化拆分规则进行拆分,生成多个js文件,每一个js文件叫做模块。凡是采用模块方式开发的应用都可以称为模块化应用。
- 任何一个组件中都可以包含这些资源:HTML CSS JS 图片 声音 视频等。从这个角度也可以说明组件是可以包括模块的。
- 组件的划分粒度很重要,粒度太粗会影响复用性。为了让复用性更强,Vue的组件也支持父子组件嵌套使用。

子组件由父组件来管理,父组件由父组件的父组件管理。在Vue中根组件就是vm。因此每一个组件也是一个Vue实例。
3.2 组件的创建、注册和使用
- **
-
<html lang=“en”>
-
-
**<meta** charset="UTF-8"**>** -
**<title>**组件的创建注册和使用**</title>** -
**<script** src="../js/vue.js"**></script>** -
-
-
**<div** id="app"**>** -
**<h1>**{ {msg}}**</h1>** -
<!-- 3.使用组件 --> -
**<userlist></userlist>** -
**<userlist></userlist>** -
**<userlogin></userlogin>** -
**<userlogin></userlogin>** -
**</div>** -
**<script>** -
// 1.创建组件 -
const userListComponent = Vue.extend({ -
template : ` -
**<ul>** -
**<li** v-for="(user,index) of users" :key="user.id"**>** -
{ {index}},{ {user.name}} -
**</li>** -
**</ul>** -
`, -
data(){ -
return { -
users : [ -
{id:'001', name:'jack'}, -
{id:'002', name:'lucy'}, -
{id:'003', name:'james'} -
] -
} -
} -
}) -
// 1.创建组件 -
const userLoginComponent = Vue.extend({ -
template : ` -
**<div>** -
**<h3>**用户登录**</h3>** -
**<form** @submit.prevent="login"**>** -
账号:**<input** type="text" v-model="username"**><br><br>** -
密码:**<input** type="password" v-model="password"**><br><br>** -
**<button>**登录**</button>** -
**</form>** -
**</div>** -
`, -
data(){ -
return { -
username : 'admin', -
password : '123' -
} -
}, -
methods : { -
login(){ -
alert(this.username + "," + this.password) -
} -
} -
}) -
const vm = new Vue({ -
el : '#app', -
data : { -
msg : '组件的创建注册和使用' -
}, -
// 2.注册组件(局部注册) -
components : { -
// userlist 就是组件的名字 -
userlist : userListComponent, -
userlogin : userLoginComponent -
} -
}) -
**</script>** -
-
-
创建组件
- const userComponent = Vue.extend({这个配置项和创建Vue实例的配置项几乎是一样的,只是略有差异})
- 需要注意的是:
- el不能用。组件具有通用性,不特定为某个容器服务,它为所有容器服务。
- data必须使用函数形式:return {}
- 使用template配置项配置页面结构:HTML。
-
注册组件
- 局部注册
- 使用components配置项:components : {user : userComponent},user就是组件名。
- 全局注册
- Vue.component(‘user’, userComponent)
- 局部注册
-
使用组件
- 直接在页面需要使用组件的位置:
- 也可以这样使用: (不在脚手架环境中使用这种方式会出现后续元素不渲染的问题。)
-
创建组件对象也有简写形式:Vue.extend() 可以省略。直接写:{}
-
组件的命名细节:
- 全部小写
- 首字母大写,后面全部小写
- kebab-case串式命名法
- CamelCase驼峰式命名法(这种方式需要在脚手架环境中使用)
- 不要使用HTML内置的标签作为组件名称。
- 可以使用name配置项来指定Vue开发者工具中显示的组件名。
3.3 组件嵌套
- **
- <html lang=“en”>
-
**<meta** charset="UTF-8"**>** -
**<title>**组件嵌套**</title>** -
**<script** src="../js/vue.js"**></script>** -
**<div** id="root"**></div>** -
**<script>** -
// 创建Y1组件 -
const y1 = { -
template : ` -
**<div>** -
**<h3>**Y1组件**</h3>** -
**</div>** -
` -
} -
// 创建X1组件 -
const x1 = { -
template : ` -
**<div>** -
**<h3>**X1组件**</h3>** -
**</div>** -
` -
} -
// 创建Y组件 -
const y = { -
template : ` -
**<div>** -
**<h2>**Y组件**</h2>** -
**<y1></y1>** -
**</div>** -
`, -
components : {y1} -
} -
// 创建X组件 -
const x = { -
template : ` -
**<div>** -
**<h2>**X组件**</h2>** -
**<x1></x1>** -
**</div>** -
`, -
components : {x1} -
} -
// 创建app组件 -
const app = { -
template : ` -
**<div>** -
**<h1>**App组件**</h1>** -
**<x></x>** -
**<y></y>** -
**</div>** -
`, -
// 注册X组件 -
components : {x,y} -
} -
// vm -
const vm = new Vue({ -
el : '#root', -
template : ` -
**<app></app>** -
`, -
// 注册app组件 -
components : {app} -
})

Vue组件化&spm=1001.2101.3001.5002&articleId=130380240&d=1&t=3&u=5c2465c5b1f44afe9ca403de9f7ebf94)
343

被折叠的 条评论
为什么被折叠?



