Vue之样式绑定事件,按键修饰符常用控件

样式绑定

class绑定
使用方式:v-bind:,expression的类型:字符串、数组、对象
style绑定
v-bind:style=“expression”, expression的类型:字符串、数组、对象

示例:
<--定义示例样式-->
<style> 
.fontClass { font-size: 40px;
}
.colorClass {color: red;
}
</style>
<!--使用-->
<p><span v-bind:class="fc">fafa</span>
</p>
<p><!--简写--><span :class="ac">fafa</span>
</p><p><!--直接使用style样式单--><span style="font-size: 40px; color:blue;">aaa</span><br/><!-- 使用vue,样式名称为驼峰风格 。花括号,多个属性逗号分隔--><span :style="{fontSize:fontSize+'px',color: color}">bbb</span><br/><span :style="myStyle">test</span>
</p>
var vm = new Vue({el: "#app",data: {fc: 'fontClass',ac: ['fontClass', 'colorClass'],fontSize: 40,color: 'green',//样式对象,注意:样式名使用驼峰命名,如:fontSizemyStyle: {fontSize: '50px',color:'red',fontWeight: 'bold'}}
});

事件修饰符

几个常用的事件修饰符:

示例:

<div>接收消息:{{receverMsg}}</div>
<p><!--响应多次或一次点击事件--><input type="text" v-model="sendMsg"><button @click="sender">发送(多次)</button><button @click.once="sender">发送(一次)</button>
</p>
<p><!-- 阻止表单提交 --><form action="testAction.action" method="post" @submit.prevent="doSubmit()"><label>名称</label><input type="text" name="name"/><input type="submit" value="提交"/></form>
</p>
var vm = new Vue({el: "#app",data: {receverMsg: null,sendMsg: null},methods: {sender: function() {this.receverMsg = this.sendMsg;},doSubmit: function() {alert('ok');}}});

按键修饰符

Vue允许为v-on在监听键盘事件时添加按键修饰符。
示例:

<input type="text" @keyup.13="doSubmit" v-model="name">
var vm = new Vue({el: "#app",data: function() {return {name: 'hello vue'}},methods: {doSubmit: function() {alert("响应enter," + this.name);}}
});
  1. 常用控件
    4.1 常用控件示例
    通过实现一个类型注册的页面,熟悉常用的控件。文本框/密码框/文本域/单选/多选/下拉列表
<div id="app"><div><label>账号:</label><input type="text" v-model="uname"></div><div><label>密码:</label><input type="password" v-model="upwd"></div><div><label>年龄:</label><input type="text" v-model="age" ></div><div><label>性别:</label><input type="radio" v-model="sex" value="1"><input type="radio" v-model="sex" value="2"></div><div><label>爱好:</label><div style="display: inline;" v-for="h in hobbies"><input  type="checkbox" :value="h.id" v-model="hobby"/>{{h.name}}</div></div><div><label>地区</label><select v-model="selectedCity"><option value="">-- 请选择 --</option><option v-for="c in city" :value="c.id">{{c.name}}</option></select></div><div><label>备注:</label><textarea v-model="remark"></textarea></div><div><input type="checkbox" v-model="flag">是否已阅读并同意协议</div><div><button @click="submit" :disabled="disabled">提交</button></div>
</div>
var vm = new Vue({el: "#app",data: {uname: '',upwd:'',age:'',sex: 1,//用于通过v-for指令输出多选框列表hobbies:[{id: '1', name:'打游戏'},{id: '2', name:'编程'},{id: '3', name:'旅游'}],/** 用于通过v-model双向绑定,保存用户的选择。* 此处为多选,需要通过数组接收,否则无法* 正常接收复选框的值,且复选框的行为也不正常,* 可能出现要么全部被选择,要么全部被取消的情况*/hobby:[],remark: null,//用于生成地区选择列表city:[{id:"1", name:"长沙"},{id:"1", name:"株洲"},{id:"1", name:"湘潭"}],//用于保存用户选择的地区selectedCity: '',//是否同意协议,默认值为falseagreed:false,//提交按钮是否禁用,默认为truedisabled: true},//监控agreed属性,如果同意协议则将提交按钮//设置为可用,否则提交按钮为禁用状态watch: {agreed: function(val) {if(val) {this.disabled = false;}else{this.disabled = true;}}},methods: {submit: function() {let data = {uname: this.uname,upwd: this.upwd,age:this.age,sex: this.sex,hobby: this.hobby,city: this.selectedCity,remark: this.remark}console.log(data);}}});

不使用监视器的简单方式: 删除监听器,然后将提交按钮的做如下修改

<button @click=“submit” :disabled=“!agreed”>提交
4.2 修饰符
修饰符 作用
.lazy 默认情况下, v-model在input事件中同步输入框的值与数据,但你可以添加一个修饰符lazy,从而转变为在change事件中同步
.number 将用户的输入值转为 Number 类型
.trim 自动过滤用户输入的首尾空格
以.number为例,示例修饰符的使用,将输入的年龄属性转换为数值型

<div><label>年龄:</label><input type="text" v-model.number="age" >
</div>
  1. 自定义指令
    Vue除支持内置的v-model/v-show等指令,还允许自定义指令。 vue2中,代码的复用和抽象的主要形式是组件,但在有些情况下仍然需要对普通dom元素做底层操作,这种情况下需要自定义指令。根据自定义指令的作用范围,可分为:全局、局部两种

钩子函数:

名称 作用
bind 只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置
inserted 被绑定元素插入父节点时调用 (仅保证父节点存在,但不一定已被插入文档中)
update 所在组件的 VNode 更新时调用,但是可能发生在其子 VNode 更新之前。指令的值可能发生了改变,也可能没有。但是你可以通过比较更新前后的值来忽略不必要的模板更新 (详细的钩子函数参数见下)
componentUpdated 指令所在组件的 VNode 及其子 VNode 全部更新后调用
unbind 只调用一次,指令与元素解绑时调用
指令钩子函数会被传入以下参数:

el:指令所绑定的元素,可以用来直接操作 DOM 。
binding:一个对象,包含以下属性:
1) name:指令名,不包括 v- 前缀。
2) value:指令的绑定值,例如:v-my-directive=“1 + 1” 中,绑定值为 2。
3) oldValue:指令绑定的前一个值,仅在 update 和 componentUpdated 钩子中可用。无论值是否改变都可用。
4) expression:字符串形式的指令表达式。例如 v-my-directive=“1 + 1” 中,表达式为 “1 + 1”。
5) arg:传给指令的参数,可选。例如 v-my-directive:foo 中,参数为 “foo”。
6) modifiers:一个包含修饰符的对象。例如:v-my-directive.foo.bar 中,修饰符对象为 { foo: true, bar: true }。
vnode:Vue 编译生成的虚拟节点。移步 VNode API 来了解更多详情。
oldVnode:上一个虚拟节点,仅在 update 和 componentUpdated 钩子中可用。
5.1 局部
通过自定义标签设置文字颜色

<div id="app"><!--red绑定到data里面的变量--><p v-color="red">我是自定义指令</p> 
</div>
var vm = new Vue({el: '#app',data: {red:'red'},//自定义指令,局部directives:{color: {inserted: function(el,binding) {console.log(el,binding);el.style.color = binding.value;}}}
});

5.2 全局

<div id="app"><!--red绑定到data里面的变量--><p v-color="red">我是自定义指令</p> 
</div>

//自定义标签,全局

Vue.directive('color', {inserted: function(el,binding) {console.log(el,binding);el.style.color = binding.value;}
})var vm = new Vue({el: '#app',data: {red:'red'}
});
  1. vue组件(重点)
    6.1 组件介绍
    组件(Component)是Vue最强大的功能之一,
    组件可以扩展HTML元素,封装可重用的代码
    组件系统让我们可以用独立可复用的小组件来构建大型应用,几乎任意类型的应用的界面都可以抽象为一个组件树
    组件可以分为全局组件和局部组件
    组件命名规则

短横线命名,如: my-component,vue推荐使用这种方式的命名规则
首字母大写命名规则,如:MyComponent
props

props是父组件用来传递数据的一个自定义属性。
父组件的数据需要通过props把数据传给子组件,子组件需要显式地用props选项声明 “prop”
6.2 局部组件
定义语法:new Vue({el:‘#d1’,components:{组件名:{配置选项}}})

<div id="app"><div><!--title是用来传值的自定义属性,在自定义组件的props中定义 --><button-counter title="测试"/></div>
</div>
var vm = new Vue({el: '#app',data: {ts: new Date().getTime()},//局部自定义组件components: {//组件名: {配置项}'button-counter':  {//用来传值的自定义属性props:['title'],//模板,模板中写的html代码,在其中可以使用{{}},及指令等vue元素template: '<button @click="doClick">{{title}}:局部组件,点击计数器:{{count}}</button>',//注意:在自定义的组件中需要使用函数来定义datadata: function() {return {count: 0}},//定义响应事件函数methods: {doClick: function() {//注意此处this的作用返回是自定义组件,而不是上面声明//的vue实例.this.count++;}}}}
});

注:为什么在自定义组件中必须使用函数方式来什么data?
每个自定义组件使用函数方式来声明data,这样每个实例可以维护一份被返回对象的独立的拷贝,在定义自定义组件时,一定要注意这一点。
6.3 全局组件
将上面的局部组件修改为全局组件。
全局组件定义语法:Vue.component(组件名, 配置选项)

<div id="app"><div><button-counter title="测试"/></div>
</div>

//全局组件

Vue.component('button-counter', {//用来传值的自定义属性props:['title'],//模板,模板中写的html代码,在其中可以使用{{}},及指令等vue元素template: '<button @click="doClick">{{title}}: 全局组件,点击计数器:{{count}}</button>',//注意:在自定义的组件中需要使用函数来定义datadata: function() {return {count: 0}},//定义响应事件函数methods: {doClick: function() {//注意此处this的作用返回是自定义组件,而不是上面声明//的vue实例.this.count++;}}
});var vm = new Vue({el: '#app',data: {ts: new Date().getTime()}
});
  1. 自定义事件
    Vue自定义事件是为组件间通信设计, vue中父组件通过prop传递数据给子组件,而想要将子组件的数据传递给父组件,则可以通过自定义事件的绑定

父Vue实例->子Vue实例,通过prop传递数据
子Vue实例->父Vue实例,通过事件传递数据
7.1 子 -> 父
触发事件:$emit(eventName, 参数…)
注意:事件名必须用短横线命名方式。

<div id="app"><!--子组件到父组件--><div><button-counter v-on:click-test="clickTest"/></div>
</div>
var vm = new Vue({el: '#app',data: {ts: new Date().getTime()},//对于自定义的button-counter组件, Vue实例为父组件//在父组件中定义一个test方法,子组件调用该方法methods: {clickTest: function(msg) {console.log("test: "+ msg);}},//局部自定义组件components: {//组件名: {配置项}'button-counter':  {//用来传值的自定义属性props:['title'],//模板,模板中写的html代码,在其中可以使用{{}},及指令等vue元素template: '<button @click="doClick">{{title}}:局部组件,计数:{{count}}</button>',//注意:在自定义的组件中需要使用函数来定义datadata: function() {return {count: 0}},//定义响应事件函数methods: {doClick: function() {//注意此处this的作用返回是自定义组件,而不是上面声明的vue实例.//注意事件名使用短横线命名方式this.$emit("click-test","hello vue");}}}}
});

7.2 父 -> 子
注意:props定义属性时采用的是驼峰命名法,而在html中使用时需要对应的变为短横线命名法!!

<div id="app"><!--子组件到父组件--><div><!-- 注意此处将定义props时的驼峰命名法,变为了短横线命名法 !!! --><button-counter title-desc="测试" /></div>
</div>
var vm = new Vue({el: '#app',data: {ts: new Date().getTime()},//对于自定义的button-counter组件, Vue实例为父组件//在父组件中定义一个test方法,子组件调用该方法methods: {clickTest: function(msg) {console.log("test: "+ msg);}},//局部自定义组件components: {//组件名: {配置项}'button-counter':  {//用来传值的自定义属性//注意此处使用驼峰命名法 !!!props:['titleDesc'],//模板,模板中写的html代码,在其中可以使用{{}},及指令等vue元素template: '<button @click="doClick">{{titleDesc}}:局部组件,计数:{{count}}</button>',//注意:在自定义的组件中需要使用函数来定义datadata: function() {return {count: 0}},//定义响应事件函数methods: {doClick: function() {//注意此处this的作用返回是自定义组件,而不是上面声明的vue实例.//注意事件名使用短横线命名方式this.count ++;console.log(this.titleDesc);}}}}
});

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/116479.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

rabbitMQ(3)

RabbitMq 交换机 文章目录 1. 交换机的介绍2. 交换机的类型3. 临时队列4. 绑定 (bindings)5. 扇形交换机&#xff08;Fanout &#xff09; 演示6. 直接交换机 Direct exchange6.1 多重绑定6.2 direct 代码案例 7. 主题交换机7.1 Topic 匹配案例7.2 Topic 代码案例 8. headers 头…

Kubernetes-进阶(Pod生命周期/调度/控制器,Ingress代理,数据存储PV/PVC)

Kubernetes-进阶 Pod详解 每个Pod中都可以包含一个或多个容器&#xff0c;这些容器可以分两类 用户程序所在容器&#xff0c;数量用户决定Pause容器&#xff0c;这是每个Pod都会有的一个根容器&#xff0c;它的作用有两个 可以以它为依据&#xff0c;评估整个Pod的健康状态可以…

itbuilder软件在线设计数据库模型,AI与数据库擦出的火花

今天要介绍一款强大的软件&#xff0c;它就是itBuilder软件&#xff0c;一款在线设计数据库模型软件&#xff0c;借助人工智能提高效率&#xff0c;可以生成CRUD代码并推送至开发工具中&#xff1b;它涵盖了几乎所有语言&#xff0c;如Java、Python、JavaScript等&#xff0c;并…

4种实用的制作URL 文件的方法

很多小伙伴有自己的博客、淘宝或者共享文件网站&#xff0c;想要分享、推广自己的网址做成url文件&#xff0c;让别人点击这个url文件直接访问自己的网站。URL文件其实就一个超级链接&#xff0c;制作的方法很多&#xff0c;这里列举4种。 收藏网站直接拖拽 1.第一种&#xf…

drf-过滤、排序、异常处理、自封装Response

过滤 过滤就是根据路由url?后的信息过滤出符合&#xff1f;后条件的数据而非全部&#xff0c;比如…/?nameweer就是只查name是weer的数据&#xff0c;其余不返回。 1、安装&#xff1a;pip3 install django-filter2、注册&#xff1a;在settings.py中的app中注册django-filt…

读书笔记:Effective C++ 2.0 版,条款24(参数缺省值)、条款25(int 0与NULL *歧义问题)

条款24: 在函数重载和设定参数缺省值间慎重选择 基于例子说明&#xff0c;个人觉得核心准则是&#xff1a;尽量简单就行了&#xff0c;简单不了就不要怕麻烦。 //能找到缺省值 int max(int a,int b std::numeric_limits::min(),int c std::numeric_limits::min(),int d std…

服务器数据恢复-某银行服务器硬盘数据恢复案例

服务器故障&分析&#xff1a; 某银行的某一业务模块崩溃&#xff0c;无法正常使用。排查服务器故障&#xff0c;发现运行该业务模块的服务器中多块硬盘离线&#xff0c;导致上层应用崩溃。 故障服务器内多块硬盘掉线&#xff0c;硬盘掉线数量超过服务器raid阵列冗余级别所允…

【T3】畅捷通T3备份账套提示:超时已过期,错误‘53‘文件不存在。

【问题描述】 针对畅捷通T3软件&#xff0c;进行账套备份&#xff08;账套输出&#xff09;的时候&#xff0c; 先是提示”超时已过期“&#xff1b; 点击确定后&#xff0c;再次提示&#xff1a;运行时错误53&#xff0c;文件未找到。 最终导致账套备份/输出失败。 【解决…

react懒加载lazy

lazy 能够让你在组件第一次被渲染之前延迟加载组件的代码。 const SomeComponent lazy(load) 参考 lazy(load) 在组件外部调用 lazy&#xff0c;以声明一个懒加载的 React 组件: import { lazy } from react;const MarkdownPreview lazy(() > import(./MarkdownPrev…

D - United We Stand

思路&#xff1a; &#xff08;1&#xff09;题目要求将集合A划分为B&#xff0c;C两组&#xff0c;使得C中任意数都不是B中的除数 &#xff08;2&#xff09;直观感受&#xff0c;只要让C中数比B中大&#xff0c;则满足条件&#xff0c;不妨只取最大的放入C中&#xff1b; …

Vue之混入(mixin)

在 Vue 中&#xff0c;混入&#xff08;mixin&#xff09;是一个强大的功能&#xff0c;它能够使得相同代码在不同组件中公用&#xff0c;甚至可以将公用代码添加到全局中&#xff0c;能够使得开发更加简洁、规范。所谓混入就是将公用的代码&#xff0c;混入到不同的组件中。 …

windows10下pytorch环境部署留念

pytorch环境部署留念 第一步&#xff1a;下载安装anaconda 官网地址 &#xff08;也可以到清华大学开源软件镜像站下载&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/&#xff09; 我安装的是下面这个&#xff0c;一通下一步就完事儿。 第二步&#x…

Android-Framework 应用间跳转时,提供 Android Broadcast 通知

一、环境 高通865 Android 10 二、情景 应用跳转时,通过广播发送源app的包名和目标app的包名 三、代码实现 frameworks/base/services/core/java/com/android/server/wm/ActivityStarter.java -132,6 132,14 import java.io.PrintWriter;import java.text.DateFormat;imp…

Java中配置RabbitMQ基本步骤

在Java中配置RabbitMQ&#xff0c;需要遵循以下步骤&#xff1a; 1.添加依赖 在项目的pom.xml文件中添加RabbitMQ的Java客户端依赖&#xff1a; <dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><versio…

NLP入门——语言结构/语言建模

一、Linguistics 语言学 wordsmorphology 形态学&#xff1a;词的构成和内部结构研究。如英语的dog、dogs和dog-catcher有相当的关系morpheme 语素&#xff1a;最小的语法单位&#xff0c;是最小的音义结合体lexeme 词位&#xff1a;词的意义的基本抽象单位&#xff0c;是一组…

【Web安全】SQL注入攻击几种常见防御手法总结

文章目录 前言一、使用参数化查询二、输入验证和过滤三、使用存储过程四、最小权限原则五、使用ORM框架六、使用准备语句七、使用安全的数据库连接八、避免动态拼接SQL语句九、使用防火墙和入侵检测系统(一)防火墙(二)入侵检测系统(Intrusion Detection System,简称IDS)十、定期…

Scala入门到放弃—02—函数

文章目录 函数方法定义默认参数命名参数可变参数条件语句循环表达式 函数 方法定义 def 方法名(参数: 参数类型): 返回值类型 {//方法体//最后一行作为返回值(不需要使用return) } def max(x: Int, y: Int): Int {if(x > y)xelse y }package org.example object App {de…

2.6.C++项目:网络版五子棋对战之数据管理模块-游戏房间管理模块的设计

文章目录 一、意义二、功能三、作用四、游戏房间类基本框架五、游戏房间管理类基本框架七、游戏房间类代码八、游戏房间管理类代码 一、意义 对匹配成功的玩家创建房间&#xff0c;建立起一个小范围的玩家之间的关联关系&#xff01; 房间里一个玩家产生的动作将会广播给房间里…

基本的爬虫工作原理

爬虫是一种自动化程序&#xff0c;能够模拟人类的浏览行为&#xff0c;从网络上获取数据。爬虫的工作原理主要包括网页请求、数据解析和数据存储等几个步骤。本文将详细介绍爬虫的基本工作原理&#xff0c;帮助读者更好地理解和应用爬虫技术。 首先&#xff0c;爬虫的第一步是…

I/O模型之非阻塞IO

简介 五种IO模型   阻塞IO   非阻塞IO   信号驱动IO   IO多路转接    异步IO 代码书写 非阻塞IO 再次理解IO 什么是IO&#xff1f;什么是高效的IO&#xff1f; 为了理解后面的一个问题&#xff0c;我们首先要再重新理解一下什么是IO 在之前的网络介绍中&#xff…