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其实是一个语法糖,它的背后本质上包含两个操作:

  1. v-bind绑定一个value属性
  2. v-on指令给当前元素绑定input事件

v-model修饰符

  1. lazy:让数据在失去焦点或者回车时才会更新
 <input type="text" v-model.lazy="message">
  1. number:让数据在输入框输入的内容自动转换成数字类型
<input type="text" v-model.number="message">
  1. trim:过滤内容两边的空格
<input type="text" v-model.trim="message">

Vue组件化开发

Vue组件化思想

组简化是Vue.js中的重要思想:
他提供了一种抽象,让我们可以开发出一个个独立可复用的小组件来构造我们的应用。
任何的应用都会被抽象成一颗组件树。

组件注册

注册组件的基本步骤

  1. 组件使用步骤:
    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>
  1. 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模块内容

  1. <script type="text/x-template" > 模板内容</script>
<script type="text/x-template" id="cpn"><div><h2>海王</h2></div></script>
  1. <template>模板内容</template>
<template id="depart"><div><h2>海贼王</h2></div> </template>

组件注册注意事项

组件是一个单独功能模块的封装,不能访问Vue实例数据这个模块有属于自己的HTML模板,也应该有属于自己的数据data.

  1. data必须是一个函数 ,而且这个函数返回一个对象,对象内部保存着数据
  2. 组件模板内容必须是单个根元素
  3. 组件模板内容可以是模板字符串
  4. 组件命名方式:驼峰命名式 短横线式
  5. 如果使用驼峰命名式命名组件,那么在使用组件的时候,只能在字符串模板中用驼峰命名式使用组件,但是在普通的标签模板中,必须使用短横线的方式使用组件 ,当使用 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>

通过自定义事件向父组件发送消息

自定义事件的流程:

  1. 在子组件中,通过$emit()来触发事件
  2. 在父组件中,通过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组件化相关推荐

  1. 如何通过 Vue+Webpack 来做通用的前端组件化架构设计

    目录:   1. 架构选型     2. 架构目录介绍     3. 架构说明     4. 招聘消息 目前如果要说比较流行的前端架构哪家强,屈指可数:reactjs.angularjs.emberj ...

  2. vue问题三:element ui的upload组件上传图片成功和移除事件

    element ui的upload组件上传图片成功和移除事件: 登录后获取到后台传的token存到中: sessionStorage.setItem("token",data.ob ...

  3. 用 JavaScript 实现三次贝塞尔动画库 - 前端组件化

    这期我们来完善上一期的动画库.在 Animation 类中的 constructor 的参数,我们发现其他的参数都用上了.但是 timingFunction 我们是还没有使用上的.这里我们就来一起处理 ...

  4. vue(9)—— 组件化开发 - webpack(3)

    前面两个终于把webpack相关配置解析完了.现在终于进入vue的开发了 vue组件化开发预热 前期准备 创建如下项目: app.js: footer.js: main.js: webpack.con ...

  5. 【Vue基本指令】一.什么是Vue;二.Vue开发的方式;三.Vue的基本指令(重点)

    目录 一.什么是Vue 1.前端技术的发展(html.CSS.JavaScript) (1)JQuery:是对JavaScript进行了封装,使得操作DOM.事件处理.动画处理.Ajax交互变得非常简 ...

  6. vue.js 三种方式安装--npm安装

    Vue.js是一个构建数据驱动的 web 界面的渐进式框架.     Vue.js 的目标是通过简单的 API 实现响应的数据绑定和组合的视图组件.它不仅易上手,便于与第三方库或既有项目整合.     ...

  7. Vue第三部分(1):Vue脚手架构建过程详细介绍和案例

    Vue-CLI 基本使用 命令行界面(英语:command-line interface,缩写:CLI)是在图形用户界面得到普及之前使用最为广泛的用户界面,它通常不支持鼠标,用户通过键盘输入指令,计算 ...

  8. vue.js三种安装方式

    Vue.js(读音 /vjuː/, 类似于 view)是一个构建数据驱动的 web 界面的渐进式框架.Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件.它不仅易于上手 ...

  9. vue,的M、V、VM分别代表什么

    M.V.VM分别代表什么? M: model,数据部分,即data V: view,视图,即html部分 vm: viewmodel,vue实例 <!DOCTYPE html> <h ...

  10. vue.js 三种方式安装

    Vue.js(读音 /vjuː/, 类似于 view)是一个构建数据驱动的 web 界面的渐进式框架.Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件.它不仅易于上手 ...

最新文章

  1. ubuntu16.04 sudo apt-get update解决Hash sum错误
  2. 【Machine Learning in Action --3】决策树ID3算法
  3. 使用$.ajax向服务器发送请求
  4. 谈谈nodejs爬虫程序利器——cheerio模块
  5. 关于Mytatis动态拼接in语句并且按照指定顺序排序的问题
  6. 怎么更好掌握Web前端技术?JS的跨域是怎么回事?
  7. beta 发布的相关评论
  8. opengl超级宝典(第5版)的环境搭建
  9. linux卸载+oracle客户端,官方的linux上卸载oracle步骤
  10. (二十三)用几何布朗运动模拟股价走势
  11. matlab 光栅 傅里叶,Matlab在光学中的应用举例 (二)(光栅)
  12. 计算机数学基础①(Numbers)
  13. spring aop分析(一)
  14. 【硕士论文】《动态场景下的语义三维地图构建 》西南科技大学 余东应
  15. 阿里巴巴开发手册(官方认定文档)
  16. 2023轩辕奖出炉,怿星科技共创荣誉
  17. 微信小程序之线路查询
  18. 史上最全Java工程师面试题汇总
  19. 安装VLC媒体播放器
  20. ijkplayer的简单使用

热门文章

  1. Android 2.3.5/4.0.3/4.1PowerManager简单总结和心得体会
  2. UE4之TextureSample
  3. wpf之代码给grid添加内容
  4. ES6中的React生命周期详解
  5. PM2怎么保持Node应用程序永久活动?
  6. 解决WordPress无法发送电子邮件
  7. bvp解算器是什么_中科院孙晓明:算法本身并没有善恶,看你想要的目标是什么...
  8. 怎么锁定电脑屏幕_锁定流行趋势,信霆为你盘点3C数码配件中的人气单品
  9. 内存颗粒和闪存颗粒的区别_颠覆你的常识,这内存上面混搭了四个厂家的颗粒...
  10. win10+tensorflow-gpu+pycharm+anaconda...的成功安装,顺利在spyder import tensorflow