【学Vue就跟玩一样】组件-非单文件组件的使用
后台-插件-广告管理-内容页头部广告(手机) |
一,什么是组件
实现应用中局部功能代和资源的集合(简单来说就是将html,js,css,资源整合起来的一个小盒子)
理解:用来实现局部(特定)功能效果的代码集合
为什么:一个界面的功能很复杂
作用:复用编码,简化项目编码,提高运行效率
组件又分为非单文件组件和单文件组件,一般常用的就是单文件组件
二,非单文件组件
2.1使用组件的三大步骤
1.创建组件
(1)如何定义一个组件?
使用Vue.extend(options )创建,其中options和new Vue(options)时传 入的那个options儿乎一样。但是也略有不同,组件内不需要写el该属性,因为组件是直接服务于Vue实例的,所以并不需要在组件内写,并且组件写完之后不只是服务于一个地方,这里就体现了组件的复用性,所以组件不能写el。
2.注册组件
(2)如何注册组件?
1.局部注册:靠new Vue的时候传入components选项
2.全局注册:靠Vue.component( '组件名,组件)
3.使用组件
(3)如何使用组件
编写组件标签(使用组件)
下面是创建非单文件组件的全过程
(4)为什么data必须写成函数?
避免组件被复用时,数据存在引用关系。
注:使用template 可以配置组件结构。
- <div id="user">
- <school>school>
- <br>
- <xuesheng>xuesheng>
- div>
- <div class="user2">
- <hello>hello>
- div>
- body>
- <script>
- // 第一步:创建组件
- // 创建school组件
- const school = Vue.extend({
- template: `
-
学校名称:{{schoolName}}
-
地址:{{address}}
- `,
- // 组件里不用写el也不能写el,而且组件里必须写函数式
- data() {
- return {
- schoolName: '山鱼屋',
- address: 'Nanbian'
- }
- }
- })
- // 创建student组件
- const student = Vue.extend({
- template: `
-
学生名称:{{studentName}}
-
年龄:{{age}}
- `,
- // 组件里不用写el也不能写el,而且组件里必须写函数式
- data() {
- return {
- studentName: '山鱼屋',
- age: 20
- }
- },
- methods: {
- showName() {
- alert(this.studentName)
- }
- },
- })
- // 创建全局组件
- const hello = Vue.extend({
- template: `
-
你好呀!{{name}}
- `,
- data() {
- return {
- name: 'shanyu',
- }
- }
- })
- // 注册全局的组件
- Vue.component('hello', hello);
- // 创建vm
- new Vue({
- el: '#user',
- // 第2步.注册组件
- components: {
- // 键值对形式(若键值对同名可简写)
- school,
- xuesheng: student
- }
- })
- new Vue({
- el: '.user2',
- })
- script>
4.关于写法的注意点
1.关于组件名
一个单词组成: 第一种写法( 首字母小写):+ school,第二种写法(首字母大写) School
多个单词组成: 第一种写法(kebab-case命 名):my-school,第二种写法(Came1Case命 名): MySchool (需要Vue脚手架支持)
注:
(1),组件名尽可能回避HTML中已有的元素名称,例如: h2、 H2都不行。
(2).可以使用name配置项指定组件在开发者工具中呈现的名字。
2.关于组件标签
第1种写法:
第2种写法:
3.简写方式
const school = Vue.extend(options)可简写为: const school = {options}
2.2组件的嵌套
和俄罗斯套娃差不多,大件套小件(其实vm下面还有一个名为app的组件,他管理着所有的组件)
- <body>
- <div id="user">
- div>
- <script>
- // 创建room组件
- const room = {
- template:
- `<div>
- <h2>
- 房间号{{num}}
- h2>
- <h2>
- puwei:{{pnum}}
- h2>
- div>`,
- data() {
- return {
- num: '222',
- pnum: '8'
- }
- }
- }
- // 创建students组件
- const students = {
- template:
- `<div>
- <h2>
- 姓名:{{name}}
- h2>
- <h2>
- 学号:{{studentnum}}
- h2>
- <room>room>
- div>`,
- data() {
- return {
- name: '山鱼',
- studentnum: '9657'
- }
- },
- components: {
- room
- }
- }
- // 创建school组件
- const school = {
- template:
- `<div>
- <h2>
- 校名:{{sname}}
- h2>
- <h2>
- 地址:{{address}}
- h2>
- <students>students>
- div>`,
- data() {
- return {
- sname: '山鱼学院',
- address: '华山道9088号'
- }
- },
- components: {
- students
- }
- }
- const app = {
- template:
- `
- <school>school>
- div>`,
- components: {
- school
- }
- }
- // 创建app组件
- new Vue({
- template:`<app>app>`,
- el: '#user',
- components: {
- app,
- }
- })
- script>
- body>
关于VueComponent
school组件本质是一个 名为VueComponent的构造函数,且不是程序员定义的,是Vue.extend生成的。
只需要写
(自闭合标签)或 , Vue解析时会帮我们创建school组件的实例对象,也就是Vue帮我们执行的: new VueComponent(options)。
每次调用Vue.extend,返回的都是一一个全新的VueComponent(虽然双胞胎特别像但是无论怎么来说也不是相同的一个人)
this指向
(1).组件配置中data函数、methods中的函数、watch中的函数、computed中的两数它们的this均 是[VueComponent实例对象]。
(2) new Vue(options )配置中data函数、methods中的函数、watch中的函数、computed中 的函数 它们的this均是[Vue实例对象]。
点赞:您的赞赏是我前进的动力!
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。
在线投稿:投稿 站长QQ:1888636
后台-插件-广告管理-内容页尾部广告(手机) |