Vue.js基础与应用开发实战(微课版) 单元5教案.docx
《Vue.js基础与应用开发实战(微课版) 单元5教案.docx》由会员分享,可在线阅读,更多相关《Vue.js基础与应用开发实战(微课版) 单元5教案.docx(38页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Vue. js基础与应用开发实战(微课版)配套教学教案单元5课时内容Vue组件构建与应用授课时间课时8教学目标 掌握组件基础 掌握组件注册与使用 掌握组件构建 掌握Vue组件选项props 认知组件之间的通信 熟悉Vue自定义事件 掌握Vuc组件动态切换 掌握Vue插槽应用 熟悉Vue混合 能在自定义组件中利用Vue的transition属性实现图片轮换功能,在ElementUI中实现Table与Pagination组件化教学重点组件构建教学难点组件应用教学设计1 .教学思路:通过实例介绍Vue组件构建与应用。2 .教学手段:多媒体展示+软件操作。教学内容5.1 组件基础在Vue里,一个组件本
2、质上是一个拥有预定义选项的Vue实例,主要以页面结构的形式存在。不同的组 件之间具有基本交互功能,可以根据业务逻辑实现较复杂的项目功能。一个组件是一个自定义元素,也可以称 为一个模块,其中包括所需的模板、逻辑和样式。在HTML模板中,组件以一个自定义标签的形式存在,起到 占位符的作用。通过Vue的声明式渲染后,占位符将会被替换为实际的内容。5.1.1 初识组件定义组件是可复用的Vue实例,它有一个名称,以下是一个简单的组件实例。【实例5-1】定义与使用一个名称为button-counter的组件【操作要求】定义一个名称为button-counter的组件,该组件的主要功能是记录与输出单击按钮的
3、次数。【实现过程】使用HTML编辑器Dreamweaver创建网页0501.html ,实现要求的功能。(1 )定义一名为button-counter的组件var app = new Vue(el: *#app)4.使用组件5.3.2 使用template标签构建组件模板代码通常写在HTML结构中,这样可以改善开发体验,提高开发效率。Vue提供了template标签来 定义结构的模板,可以在该标签中书写HTML代码,然后通过id值绑定到template属性上。使用template标签构建组件,需要在template标签上增加id属性,用于以后的组件注册。【示例】demo050302.html代
4、码如下:欢迎登录II创建根实例var vm=new Vue(el: #app,components: app-component: template: #content)5.3.3 使用script标签构建组件使用script标签构建组件时,同样需要增加id属性,同时还得增加type=texVx-template,这是为了告诉 浏览器不执行编译里面的代码。对于以下自定义组件app-component :局部注册组件app-component的示例代码如下。【示例】demo050303.html代码如下:欢迎登录var vm=new Vue(el: app,components: app-com
5、ponent: template: #content)全局注册组件app-component的示例代码如下:欢迎登录Vponent(app-component, template: #content)上面的代码等价于:VponentCapp-component, template:、欢迎登录)【实例5-2】演练实现组件树的效果【操作要求】使用components选项注册组件,实现组件树的效果。HTML将被渲染为: 标题 正文内容对于大型应用来说,有必要将整个应用程序划分为组件,以使开发可管理。一般的组件应用模板如下:5.3.4 构建父子组件1 .使用全局注册方式构建父子组件【示例】demo05
6、0304.html使用全局注册方式构建父子组件的过程如下。(1 )构建子组件代码如下:构建子组件childvar childNode = Vue.extend(template: 这是子组件)注册名为child的组件Vponent(child,childNode)(2)构建父组件代码如下:构建父组件parent ,在其中嵌套child组件var parentNode = Vue.extend(template: 这是父组件)Vponent(parent,parentNode);(3 )定义Vue实例代码如下:var vm=new Vue(el: #app)(4)使用父组件代码如下:2 .使用局
7、部注册方式构建父子组件【示例】demo050305.html使用局部注册方式构建父子组件的过程如下。(1 )构建子组件代码如下:var childNode = Vue.extend(template: 这是子组件v/div)(2)构建父组件代码如下:在父组件中局部注册子组件var parentNode = Vue.extend(template: 这是父组件,components:child:childNode)(3 )定义Vue实例代码如下:在Vue实例中局部注册父组件var vm=new Vue(el: #app,components: parent: parentNode)(4)使用父组
8、件代码如下:5.4 Vue组件选项props组件接受的选项大部分与Vue实例一样,而组件选项props是组件中非常重要的一个选项。在Vue中, 父子组件的关系可以总结为props down和events upo父组件通过props向下传递数据给子组件,子组件通 过events给父组件发送消息。父子组件之间数据传递的示意图如图所示。父子组件之间数据传递的示意图5.4.1 父子组件在一个优秀的接口中尽可能将父子组件解耦是很重要的,这保证了每个组件可以在相对隔离的环境中书写 和理解,也大幅提高了组件的可维护性和可重用性。下面介绍两种父子组件的错误写法。以下这种形式的写法是错误的,因为当子组件注册到父
9、组件时,Vue会编译好父组件的模板,模板的内容已经决定了父组件将要渲染的HTML :parent/parent运行时,它的一些子标签只会被当作普通的HTML来执行,不是标准 的HTML标签,会被浏览器直接忽视。在父组件标签之外使用子组件也是错误的:正确写法如下。【示例】demo050401.html略HTML将被渲染为:这是子组件v/div5.4.2 静态 props组件实例的作用域是孤立的,这意味着不能(也不应该)在子组件的模板内直接引用父组件的数据。要让 子组件使用父组件的数据,需要通过子组件的props选项实现。使用props传递数据包括静态和动态两种形式,本小节先介绍静态propso子
10、组件要显式地用props选项声明它期待获得的数据。例如:var childNode = template: para propsiCpara静态props通过为子组件在父组件中的占位符添加特性的方式来达到传值的目的。【示例】demo050402.html略HTML将被渲染为:abc1235.4.3 组件命名约定HTML中的属性名是对大小写不敏感的,所以浏览器会把所有大写字符解释为小写字符。这意味着当使用 DOM中的模板时,采用驼峰命名法的props名需要使用其等价的短横线分隔命名法命名。例如:Vponent(blog-post, II在JavaScript中是驼峰命名法的写法props: fp
11、ostTitle,template: postTitle )!-在HTML中是短横线分隔命名的写法一如果使用字符串模板,那么这个限制就不存在了。对于props声明的属性来说,在父级HTML模板中,属性名需要使用短横线分隔写法。例如:var parentNode = template:,components: child: childNode);子级props属性声明时,使用小驼峰写法(除第一个单词外其余单词首字母大写)或者短横线分隔写法都 可以;子级模板使用从父级传来的变量时,需要使用对应的小驼峰写法。例如:var childNode = template: appPara ,propsifa
12、ppPara)var childNode = template: appPara ,propsifapp-para)5.4.4 动态 props在模板中动态地绑定父组件的数据到子模板的props的方式,与绑定到任何普通的HTML特性的方式类 似,都是用v-bind指令。每当父组件的数据变化时,该变化也会传导给子组件。【示例】demo050403.html略HTML将被渲染为:abc1235.4.5 传递数字以下示例使用字面量语法传递数值。【示例】demo050404.html略HTML将被渲染为:123 的数据类型是 string因为它是一个字面props ,它的值是字符串123,而不是num
13、ber类型的数据。如果想传递一个实际的 number类型的数据,需要使用v-bind指令,从而让它的值被当作JavaScript表达式计算。【示例】demo050405.html略HTML将被渲染为:123 的数据类型是 number或者可以使用动态props ,在data属性中设置对应的数字1230【示例】demo050406.html略HTML将被渲染为:123的数据类型是number的数据类型是undefined的数据类型是undefined456的数据类型是string5.4.6 props 验证可以为组件的props指定验证要求,如果传入的数据不符合指定要求,Vue会发出警告。为了定
14、制props 的验证方式,可以为props中的值提供一个带有验证需求的对象,而不能使用字符串数组。例如:VuexomponentCexample, props: /基础类型检测(null和undefined会通过任何类型验证) prop A: Number,/多种类型propB: String, Number, /必传且是字符串 propC: type: String, required: true ,/带有默认值的数字propD: type: Number, default: 100 .带有默认值的对象propE: type: Object,/数组或对象的默认值应当由一个工厂函数获取defa
15、ult: function () return message: hello),/自定义验证函数propF: validator: function (value) /这个值必须匹配下列字符串中的一个return success, warning, danger.indexOf(value) != -1 )type可以是下面原生构造器之一。 String Numbero Boolean。 Functiorio Objecto Array0 Dateo SymboLtype也可以是一个自定义构造器函数,使用instanceof检测。当props验证失败的时候,Vue (开发环境构建版本的)将会在
16、控制台界面中抛出一个警告信息(如果使 用的是开发版本卜props会在组件实例创建之前进行校验,所以在default。或validator。函数里,诸如data、 computed或methods等实例属性还无法使用。【实例53】验证传入子组件的数据是否为数字【操作要求】创建父子组件,采用props验证方式验证传入子组件的数据是否为数字,如果不是数字,则在浏览器的控 制台界面中抛出警告信息。如果num的值是数字123,浏览网页0503.html时,浏览器的控制台界面中不会出现警告信息。如果num 的值是字符串123 ,浏览网页0503.html时,浏览器的控制台界面中会出现如下所示的警告信息:v
17、ue.js:634 (Vue warn: Invalid prop: type check failed for prop para. Expected Number with value 123, got String with value 123.【实例5-4使用自定义函数验证传入子组件的数据是否符合指定条件【操作要求】创建父子组件,采用props验证,使用自定义函数验证传入子组件的数据是否符合指定条件,当函数返回 为false时,则表示不符合指定的条件,则浏览器的控制台界面中会出现警告信息。如果在父组件中传入num值为5 ,由于小于10 ,则浏览网页时浏览器的控制台界面中会输出如下的警告
18、 信息:vue.js:634 (Vue warn: Invalid prop: custom validator check failed for prop para.5.4.7 单向数据流props是单向绑定的:当父组件的属性变化时将传给子组件,但是不会反过来传递。这是为了防止子组件 无意中修改了父组件的状态,这样会让应用的数据流难以理解。另外,每次父组件更新时,子组件的所有props都会更新为最新值。这意味着不应该在子组件内部改变 props ,如果这么做了,Vue会在浏览器的控制台界面中显示警告信息。【实例55】验证props的单向绑定特性【操作要求】创建父子组件,采用props单向绑定
19、。父组件的数据变化时,子组件的数据会同步发生变化;子组件的数 据变化时,父组件数据不变,并在浏览器的控制台界面中显示警告信息。浏览网页0505.html时的初始状态如图所示。父组件数据回输入的值为:try子组件数据|歹输入的值为:try浏览网页0505.html时的初始状态将父组件数据”输入框中的“try”修改为“happy”时,“子组件数据输入框中的内容会同步修改为“happy”。而修改子组件数据.输入框中的内容时,浏览器控制台界面中会出现如下所示的警告信息:vue.js:634 Vue warnj: Avoid mutating a prop directly since the valu
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Vue.js基础与应用开发实战微课版 单元5教案 Vue js 基础 应用 开发 实战 微课版 单元 教案
限制150内