Vue第三天 v-model与Vue组件化
Vue第三天 v-model与Vue组件化
数据的双向绑定 v-model的使用
v-model的基本使用
Vue中使用v-model指令来实现表单元素和数据的双向绑定.
<div id="app"><input type="text" v-model="message"><div> {{message}}</div></div><script src="./vue.js"></script><script>const vm = new Vue({el:'#app', data:{ message:'nihaoya'}})</script>
v-model的实际原理
v-model其实是一个语法糖,它的背后本质上包含两个操作:
- v-bind绑定一个value属性
- v-on指令给当前元素绑定input事件
v-model修饰符
- lazy:让数据在失去焦点或者回车时才会更新
<input type="text" v-model.lazy="message">
- number:让数据在输入框输入的内容自动转换成数字类型
<input type="text" v-model.number="message">
- trim:过滤内容两边的空格
<input type="text" v-model.trim="message">
Vue组件化开发
Vue组件化思想
组简化是Vue.js中的重要思想:
他提供了一种抽象,让我们可以开发出一个个独立可复用的小组件来构造我们的应用。
任何的应用都会被抽象成一颗组件树。
组件注册
注册组件的基本步骤
- 组件使用步骤:
a.创建组件构造器 Vue.extend()
b.注册组件Vue.component()
c.使用组件
<div id="app"><cpn></cpn></div><script src="./vue.js"></script><script>const cpn = Vue.extend({template:`<div><h2>你好哦</h2></div>`//ES6语法});Vue.component('cpn',cpn);const vm = new Vue({el:'#app',data:{message:'你好呀,李焕英'}})</script>
- Vue.extend():
调用Vue.extend()创建的是一个组件构造器
通常在创建组件构造器时,传入template代表我们自定义的组件的模板
该模板就是在使用到组件的地方,就显示的HTML代码
事实上,这种写法在Vue2.x的文档中几乎已经看不到了,现在通常使用它的语法糖形式,如下所示:
<div id="app"><my-cpn></my-cpn><cpn2></cpn2></div><script src="./vue.js"></script><script>Vue.component('myCpn',{template:`<div><h2>海贼王</h2></div> `})const vm = new Vue({el:'#app',data:{},components:{'cpn2':{template:`<div><h2>海王</h2></div> `}} })</script>
全局组件:Vue.component(‘组件名称’,{
data:组件数据,
template:组件模板内容
})
局部组件:在Vue实例中创建components:{
组件名称:{
template:,
data:
}
}
模板分离的写法
为了将结构变得非常清晰,我们采用对模板进行分离的方法实现Vue组件的创建
Vue提供两种方案来定义HTML模块内容
<script type="text/x-template" > 模板内容</script>
<script type="text/x-template" id="cpn"><div><h2>海王</h2></div></script>
<template>模板内容</template>
<template id="depart"><div><h2>海贼王</h2></div> </template>
组件注册注意事项
组件是一个单独功能模块的封装,不能访问Vue实例数据这个模块有属于自己的HTML模板,也应该有属于自己的数据data.
- data必须是一个函数 ,而且这个函数返回一个对象,对象内部保存着数据
- 组件模板内容必须是单个根元素
- 组件模板内容可以是模板字符串
- 组件命名方式:驼峰命名式 短横线式
- 如果使用驼峰命名式命名组件,那么在使用组件的时候,只能在字符串模板中用驼峰命名式使用组件,但是在普通的标签模板中,必须使用短横线的方式使用组件 ,当使用 kebab-case (短横线分隔命名) 定义一个组件时,你也必须在引用这个自定义元素时使用 kebab-case 更多细节可以进入以下网址查询:
https://cn.vuejs.org/v2/guide/components.html
风格指南
父组件与子组件
<div id="app"><cpn2></cpn2></div><script src="./vue.js"></script><script>// 创建第一个组件(子组件)const cpn1 = Vue.extend({template:`<div><h2>海王</h2></div> `})// 创建第二个组件(父组件)const cpn2 = Vue.extend({template:`<div><h2>海贼王</h2><cpn1><cpn1></div> `,components:{cpn1:cpn1}})// root组件const vm = new Vue({el:'#app',data:{message:'nihaoo'},components:{cpn2:cpn2}}) </script>
父子组件的通信
通过props向子组件传递数据
props属性名规则:在props中使用驼峰形式,模板中需要使用短横线的形式
字符串形式的模板中没有这个限制,
props的值有两种方式:
方式一:字符串数组,数组中的字符串就是传递时的名称
<div id="app"><cpn v-bind:cmovies="movies" :cmessage="message"></cpn></div><template id="cpn"><div><ul><li v-for="item in cmovies">{{item}} </li></ul><h2>{{cmessage}} </h2></div></template><script src="./vue.js"></script><script>const cpn = {props:['cmovies','cmessage'],template:'#cpn',data(){return {}}}const vm = new Vue({el:'#app',data:{message:'我从今开始守望',movies:['海王','海贼王','复仇者联盟']},components:{cpn}//es6的对象字面量增强语法})</script>
方式二:对象,对象可以设置传递时的类型,也可以设置默认值等
<div id="app"><cpn v-bind:cmovies="movies" :cmessage="message"></cpn></div><template id="cpn"><div><ul><li v-for="item in cmovies">{{item}} </li></ul><h2>{{cmessage}} </h2></div></template><script src="./vue.js"></script><script>const cpn = {// props:['cmovies','cmessage'],props:{// 类型限制// cmessage:Array,// cmessage:String//提供一些默认值 规定类型为对象和数组时,默认值必须是一个函数。cmovies:{type:Array,default(){return []}, // 默认值require:true //表示该值必须传},cmessage:{type:String,default:[]}},template:'#cpn',data(){return {}}}const vm = new Vue({el:'#app',data:{message:'我从今开始守望',movies:['海王','海贼王','复仇者联盟']},components:{cpn}//es6的对象字面量增强语法})</script>
通过自定义事件向父组件发送消息
自定义事件的流程:
- 在子组件中,通过$emit()来触发事件
- 在父组件中,通过v-on来监听子组件事件
// 父组件<div id="app"><cpn @itemclick="cpnclick"></cpn></div>// 子组件<template id="cpn"><div><button v-for="item in categories" @click="btnClick(item)">{{item.name}} </button></div></template><script src="./vue.js"></script><script>const cpn={template:'#cpn',data:function(){return {categories:[{id:001,name:'热门推荐'},{id:002,name:'手机数码'},{id:003,name:'热门推荐'},{id:004,name:'热门推荐'},]}},methods:{btnClick:function(item){// 发射事件this.$emit('itemclick',item);}}}const vm = new Vue({el:'#app',components:{cpn},methods:{cpnclick:function(item){console.log(item.id); }}}) </script>
运行结果:
Vue第三天 v-model与Vue组件化相关推荐
- 如何通过 Vue+Webpack 来做通用的前端组件化架构设计
目录: 1. 架构选型 2. 架构目录介绍 3. 架构说明 4. 招聘消息 目前如果要说比较流行的前端架构哪家强,屈指可数:reactjs.angularjs.emberj ...
- vue问题三:element ui的upload组件上传图片成功和移除事件
element ui的upload组件上传图片成功和移除事件: 登录后获取到后台传的token存到中: sessionStorage.setItem("token",data.ob ...
- 用 JavaScript 实现三次贝塞尔动画库 - 前端组件化
这期我们来完善上一期的动画库.在 Animation 类中的 constructor 的参数,我们发现其他的参数都用上了.但是 timingFunction 我们是还没有使用上的.这里我们就来一起处理 ...
- vue(9)—— 组件化开发 - webpack(3)
前面两个终于把webpack相关配置解析完了.现在终于进入vue的开发了 vue组件化开发预热 前期准备 创建如下项目: app.js: footer.js: main.js: webpack.con ...
- 【Vue基本指令】一.什么是Vue;二.Vue开发的方式;三.Vue的基本指令(重点)
目录 一.什么是Vue 1.前端技术的发展(html.CSS.JavaScript) (1)JQuery:是对JavaScript进行了封装,使得操作DOM.事件处理.动画处理.Ajax交互变得非常简 ...
- vue.js 三种方式安装--npm安装
Vue.js是一个构建数据驱动的 web 界面的渐进式框架. Vue.js 的目标是通过简单的 API 实现响应的数据绑定和组合的视图组件.它不仅易上手,便于与第三方库或既有项目整合. ...
- Vue第三部分(1):Vue脚手架构建过程详细介绍和案例
Vue-CLI 基本使用 命令行界面(英语:command-line interface,缩写:CLI)是在图形用户界面得到普及之前使用最为广泛的用户界面,它通常不支持鼠标,用户通过键盘输入指令,计算 ...
- vue.js三种安装方式
Vue.js(读音 /vjuː/, 类似于 view)是一个构建数据驱动的 web 界面的渐进式框架.Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件.它不仅易于上手 ...
- vue,的M、V、VM分别代表什么
M.V.VM分别代表什么? M: model,数据部分,即data V: view,视图,即html部分 vm: viewmodel,vue实例 <!DOCTYPE html> <h ...
- vue.js 三种方式安装
Vue.js(读音 /vjuː/, 类似于 view)是一个构建数据驱动的 web 界面的渐进式框架.Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件.它不仅易于上手 ...
最新文章
- ubuntu16.04 sudo apt-get update解决Hash sum错误
- 【Machine Learning in Action --3】决策树ID3算法
- 使用$.ajax向服务器发送请求
- 谈谈nodejs爬虫程序利器——cheerio模块
- 关于Mytatis动态拼接in语句并且按照指定顺序排序的问题
- 怎么更好掌握Web前端技术?JS的跨域是怎么回事?
- beta 发布的相关评论
- opengl超级宝典(第5版)的环境搭建
- linux卸载+oracle客户端,官方的linux上卸载oracle步骤
- (二十三)用几何布朗运动模拟股价走势
- matlab 光栅 傅里叶,Matlab在光学中的应用举例 (二)(光栅)
- 计算机数学基础①(Numbers)
- spring aop分析(一)
- 【硕士论文】《动态场景下的语义三维地图构建 》西南科技大学 余东应
- 阿里巴巴开发手册(官方认定文档)
- 2023轩辕奖出炉,怿星科技共创荣誉
- 微信小程序之线路查询
- 史上最全Java工程师面试题汇总
- 安装VLC媒体播放器
- ijkplayer的简单使用
热门文章
- Android 2.3.5/4.0.3/4.1PowerManager简单总结和心得体会
- UE4之TextureSample
- wpf之代码给grid添加内容
- ES6中的React生命周期详解
- PM2怎么保持Node应用程序永久活动?
- 解决WordPress无法发送电子邮件
- bvp解算器是什么_中科院孙晓明:算法本身并没有善恶,看你想要的目标是什么...
- 怎么锁定电脑屏幕_锁定流行趋势,信霆为你盘点3C数码配件中的人气单品
- 内存颗粒和闪存颗粒的区别_颠覆你的常识,这内存上面混搭了四个厂家的颗粒...
- win10+tensorflow-gpu+pycharm+anaconda...的成功安装,顺利在spyder import tensorflow