Vue

  可以独立完成前后端分离式web项目的JavaScript框架

  三大主流框架之一: Angular  React  Vue

  先进的前端设计模式:MVVM

  可以完全脱离服务器端,以前端代码复用的方式渲染整个页面:组件化开发

  特点:

    单页面web应用

    数据驱动

    数据的双向绑定

    虚拟DOM

1 vue初识

  变量的定义与值的的输出

  vue变量:被称为插值表达式  {{ vue变量 }}

<div id='app'>
<h1> {{ h1_msg }} </h1>
<h2> {{ h2_msg }} </h2>
</div>
//js

<script>
new Vue({
el:'#app', //被称为挂载点
data:{ //为挂载点的页面结构提供数据
h1_msg:'h1的内容',
h2_msg:'h2的内容',
}
})

可以识别html标签

  vue的使用:

    1. 在html中书写挂载点的页面结构,用id表示 (id具有唯一标识性)
    2. 在自定义的script标签内用new关键字实例化Vue对象,传入一个大字典
    3. 在字典中通过 el挂载点 与挂载点页面结构绑定,data为 挂载点里面的变量 传输数据
2 vue实例之事件

用 v-on 指令添加一个事件监听器,通过它调用在 Vue 实例中定义的方法:

  v-on:事件名='变量名'  实例化Vue里面 methods关键字  为挂载点提供事件的 里面写你的    变量名:function

<!--html-->
<div id="app">
<h1 v-on:click="clickAction">h1的内容是{{ msg }}</h1>
</div>
//js
<script>
new Vue({
el:'#app',
data:{
msg:'vue渲染的内容'
},
methods:{ //为挂载点提供事件的
clickAction:function () {
alert(123)
}
}
})
</script>
3 vue操作样式

 v-bind 特性被称为指令。指令带有前缀 v-,以表示它们是 Vue 提供的特殊特性。可能你已经猜到了,它们会在渲染的 DOM 上应用特殊的响应式行为。在这里,该指令的意思是:“将这个元素节点的 style特性和 Vue 实例的 v_style 属性保持一致”。

<!--html-->

<div id="app">
<p v-on:click="btnClick" v-bind:style="v_style">点击p文字颜色变为绿色</p>
<div v-on:click="btnClick" v-bind:style="v_style"> click me give your some color ! </div>
</div>
//js

<script>
new Vue({
el:'#app',
data:{
v_style:{
color:'block'
}
},
methods:{
btnClick:function () {
this.v_style.color = 'green'  //只要是在id为app div标签里面的都可以用this 都是Vue实例化的对象
}
}
})
</script>

小结:

  vue通过 v- 指令来控制标签的属性

  vue通过 变量 数据驱动页面(页面内容)

4 文本指令

v-on:mouseover  鼠标悬停   

v-once  只能操作一次  当数据改变时,插值处的内容不会更新。但请留心这会影响到该节点上的其它数据绑定  

v-text:  给标签加内容

v-html:  输出真正的 HTML,你需要使用 v-html指令:

<!--html-->

<div id="app">
<p>{{ msg1 }}</p>
<!--<p v-text="msg2"></p>-->
<p v-html="msg2"></p>
<p v-html="msg3"></p>
<p v-once="msg4" v-on:mouseover="action">{{ msg4 }}</p>
</div>
//js 

<script>
new Vue({
el:'#app',
data:{
msg1:'msg1',
msg2:'<b>**msg2**</b>',
msg3:'msg3',
msg4:'hover me!'
},
methods:{
action:function () {
// 如果想操作第一层级的(el data methods) data的话 需要用this.$data
this.msg3 = '<i>new msg3</i>'
//this.$data.msg3
}
}
})
</script>

5 事件指令

v-on:'事件名' 可以简写为 @事件名='函数名'  v-on == > @

v-bind:herf  可以简写为  :herf  v-bind ==> :

click 鼠标点击 鼠标事件的对象:直接写函数名,默认将鼠标事件对象传入  $event就代表鼠标事件对象

事件的传参 函数可以写多个值   传值可以不用按照函数的位置形参(必须被传值)

<!--html-->

<div id="app">
<p v-on:click="action1">{{ msgs[0] }}</p>
<p @click="action2">{{ msgs[1] }}</p> <!--事件的传参-->
<ul>
<li @click="liAction(100)">列表项1</li>
<li @click="liAction(200)">列表项2</li>
<li @click="liAction(300)">列表项3</li>
</ul> <!--鼠标事件的对象:直接写函数名,默认将鼠标事件对象传入-->
<div @click="func1">func1</div> <!--鼠标事件的对象:一旦添加(),就必须手动传参, $event就代表鼠标事件对象-->
<div @click="func2($event,'abc')">func2</div> </div>
//js 

<script>
new Vue({
el:'#app',
data:{
msgs:['111','222']
},
methods:{
action1:function () {
alert(this.msgs[0])
},
action2:function () {
alert(this.msgs[1])
},
liAction:function (mun,msg) {
console.log(mun,msg)
},
func1:function (ev) {
console.log(ev)
},
func2:function (ev,msg) {
console.log(ev);
console.log(msg)
}
}
})
</script>

函数(两个位置参数)  事件传参传一个值  事件liAction

函数传入传入$event 鼠标事件对象  abc   事件func2

鼠标事件 直接写行数名func1

6 属性指令

用vue绑定属性,将属性内容交给vue处理

class 属性可以设置单个属性  多个类名:[c1,c2]  如果想固定写死一个数据,不再是变量  :class="  'br' "    多类名:class="[c1,'br']"

style 属性  :style='s1'  一个变量:该变量的值是一个大字典{}  {}字典内部完成一个个属性的设置  

                一个{}字典  字典内一个个属性有一个个变量单独控制  :style="{fonSize:fs,color:c}"

    <style>
.rDiv {
width: 100px;
height: 100px;
background-color: red;
}
.gDiv {
width: 200px;
height: 50px;
background-color: green;
}
.br {
border-radius: 50%;
}
</style> <div id="app">
<!--属性指令:用vue绑定属性,将属性内容交给vue处理-->
<p class="" style="" v-bind:owen="oo" :jason="jj"></p> <!--class属性-->
<p :class="c1" @click="action1"></p>
<!--多类名-->
<p :class="[c1, c2]"></p>
<!--'br'固定写死的数据,不再是变量-->
<p :class="[c1, 'br']"></p> <!--style属性-->
<!--一个变量:该变量值为{} {}字典内部完成一个个属性的设置-->
<p class="gDiv" :style="s1">12345</p>
<!--一个{}字典: 字典内一个个属性有一个变量单独控制-->
<p class="gDiv" :style="{ fontSize:fs,color:c }">6789</p> </div>
<script>
new Vue({
el:'#app',
data:{
oo:'Owen',
jj:'Jason',
c1:'rDiv',
c2:'br',
s1:{
fontSize:'30px',
color:'yellow',
},
fs:'20px',
c:'orange'
},
methods:{
action1:function () {
if (this.c1=='rDiv'){
this.c1='gDiv'
}else{
this.c1='rDiv'
}
}
}
})
</script>
7 表单指令

表单指令:v-model='变量'  在两个输入框属性中都定义同一个话 两个输入框内容会同步

单选框 v-model 绑定的变量是单选框中某一个input的value

多选框 v-model绑定的变量是一个列表 ,列表存放0到任意一个多选框的value

<div id="app">
<!--表单指令: v-model='变量'-->
<form action="">
<p>
<input type="text" v-model="val" name="user">
</p>
<p>
<input type="text" v-model="val">
</p> <!--单选框 v-model 绑定的变量是单选框中某一个input的value-->
<p>
男:<input type="radio" v-model="r_val" value="male" name="sex">
女:<input type="radio" v-model="r_val" value="female" name="sex">
</p> <!--多选框 v-model绑定的变量是一个列表,列表存放0到任意一个复选框的value-->
<p>
足球:<input type="checkbox" v-model='c_val' name="h" value="s">
篮球:<input type="checkbox" v-model="c_val" name="h" value="b">
双色球:<input type="checkbox" v-model="c_val" name="h" value="d">
</p> <button type="submit" >提交</button>
</form>
</div>
// js

<script>
new Vue({
el:'#app',
data:{
val:'',
r_val:'male', //默认值 默认选中男
c_val:[], }
})
</script>
8 条件指令

v-show  根据条件展示元素的指令  v-show指令:闪烁一下是因为 v-show='s1'

     但是s1条件为假   然后是以  display:none渲染

  

  如果s1条件为真  就会真正的显示在那

  

  不同的是带有v-show 的元素始终会被渲染并保留在DOM中。 v-show 只是加单切换元素的css属性 display

 v-if  指令用于条件性渲染一块内容。这块内容只会在指令的表达式返回truthy值的时候被渲染

    

<!--html-->

<h1 v-if="awesome">Vue is awesome!</h1>

    因为v-if  是一个指令,所以必须将它添加到一个元素上。但是如果想切换多个元素呢?此时可以把一个<template>  元素当做不可见的包裹元素,并在上面使用 v-if 最终的渲染的结果将不包含<template>元素

<!--html-->

<template v-if="ok">
<h1>Title</h1>
<p>Paragraph 1</p>
<p>Paragraph 2</p>
</template>

v-else-if  必须有条件 才也有条件v-if分支绑定

v-else  会默认与v-if等有条件的分支的绑定

    <ul>
<!--v-else会默认与v-if等有条件的分支绑定-->
<!--v-else-if必须有条件才和有条件v-if分支绑定--> <li v-if="tag == 1">111</li>
<li v-else-if="tag == 2">222</li>
<li v-else>333</li>
</ul> <ul>
<li @click="action('a')">a</li>
<li @click="action('b')">b</li>
<li @click="action('c')">c</li>
</ul>
<ul>
<li v-show="flag == 'a' ">aaa</li>
<li v-show="flag == 'b' ">bbb</li>
<li v-show="flag == 'c' ">ccc</li>
</ul> </div>
<script>
new Vue({
el: '#app',
data: {
num: 10,
r1: false,
r2: false,
tag:2,
flag:''
},
methods:{
action:function (args) {
this.flag = args
}
} })
</script>

v-for  循环指令  可以遍历数组 可以遍历字典  索引可以做简单的运算 不建议计算复杂的

    <ul>
<li v-for="num in nums">{{ num }}</li> <!--只遍历值-->
</ul>
<ul>
<li v-for="(num,index) in nums">{{ num }} {{ index }}</li>
<hr>
<li v-for="(num,index) in nums">{{ num }} {{ index +1 }}</li>
<!--可以做简单的运算 不建议计算复杂的-->
</ul>
<ul>
<li v-for="(v,k,i) in people">{{ v }} {{ k }} {{ i }}</li>
</ul>
<script>
new Vue({
el:'#app',
data:{
nums:[3,1,2,4,5,],
people:{
'name':'owen',
'age':19,
'gender':'male'
}
}
})
</script>

用key管理可复用性

Vue 会尽可能高效地渲染元素,通常会复用已有元素而不是从头开始渲染。这么做除了使 Vue 变得非常快之外,还有其它一些好处。例如,如果你允许用户在不同的登录方式之间切换:

<template v-if="loginType === 'username'">
<label>Username</label>
<input placeholder="Enter your username">
</template>
<template v-else>
<label>Email</label>
<input placeholder="Enter your email address">
</template>

那么在上面的代码中切换 loginType 将不会清除用户已经输入的内容。因为两个模板使用了相同的元素,<input> 不会被替换掉——仅仅是替换了它的 placeholder

这样也不总是符合实际需求,所以 Vue 为你提供了一种方式来表达“这两个元素是完全独立的,不要复用它们”。只需添加一个具有唯一值的 key 属性即可:

<template v-if="loginType === 'username'">
<label>Username</label>
<input placeholder="Enter your username" key="username-input">
</template>
<template v-else>
<label>Email</label>
<input placeholder="Enter your email address" key="email-input">
</template>

注意,<label> 元素仍然会被高效地复用,因为它们没有添加 key 属性。

Vue 实例之事件 操作样式 (文本、事件、属性、表单、条件)指令的更多相关文章

  1. CSS样式之表格,表单

    布局样式 .container:固定宽度并具响应式 .container-fluid自由宽度(100%宽度) 标题样式 <h1>到<h6> 样式已经写好了,可以直接用,兼容性也 ...

  2. jQuery 1.0 | 选择器 | 事件 | 操作样式 | 操作属性

    使用jQuery: 1,下载jQuery http://jquery.com/download/ 2,引入jQuery文件 3,定义入口函数 <script src="jquery-1 ...

  3. Vue Element-ui 框架:路由设置 限制文件类型 表单验证 回车提交 注意事项 监听事件

    1.验证上传文件的类型: (1)验证图片类型 <template> <el-upload class="avatar-uploader" action=" ...

  4. Blazor和Vue对比学习(基础1.9):表单输入绑定和验证,VeeValidate和EditFrom

    这是基础部分的最后一章,内容比较简单,算是为基础部分来个HappyEnding.我们分三个部分来学习: 表单输入绑定 Vue的表单验证:VeeValidate Blazor的表单验证:EditForm ...

  5. 精通CSS+DIV网页样式与布局--设置表单和表格

    表格和表单是网页中非常重要的两个元素,在上篇博客中,我们简单的介绍了CSS的页面背景设置,今天小编继续来介绍CSS的相关知识,在我们的CSS中如何设置表格和表单,首先,来看一张思维导图,通过图简单的预 ...

  6. vue项目element-ui框架中的弹窗中的表单验证清除问题

    问题回顾: 1.vue项目的在弹窗上的form表单验证,第一次点击新增时正常,第二次新增打开弹窗后由于表单内容为空,出现验证这种情况 2.为了解决上面的情况,在执行点击新增事件加上this.$refs ...

  7. Vue + Element-ui实现后台管理系统(5)---封装一个Form表单组件和Table表格组件

    封装一个Form表单组件和Table组件 有关后台管理系统之前写过四遍博客,看这篇之前最好先看下这四篇博客.另外这里只展示关键部分代码,项目代码放在github上: mall-manage-syste ...

  8. vue + ElementUI 关闭对话框清空验证,清除form表单

    前面跟大家提到过 elementUI验证的问题,那么今天就来看看 点击对话框和关闭按钮 怎么清空验证,清空form表单,避免二次点击还会有 验证错误的提示 1.首先在你的对话框 取消按钮 加一个cli ...

  9. vue 中 使用 element-ui 发送请求前 校验全部表单,报警告: [Element Warn][Form]model is required for validate to work!

    WEB先生 2020-07-14 20:01:45  754  收藏 分类专栏: vue 文章标签: vue js 版权 报这种错可能有以下两种情况 1.属性绑定错误,确保绑定的是  :model  ...

随机推荐

  1. 利用Python+Redis实现分布式锁

    class MyDLock(object): def __init__(self, lockID,timeout): self.connection = redis.Redis(host=cfg.RE ...

  2. Python爬虫 Urllib库的基本使用

    1.构造Requset 其实上面的urlopen参数可以传入一个request请求,它其实就是一个Request类的实例,构造时需要传入Url,Data等等的内容.比如上面的两行代码,我们可以这么改写 ...

  3. ARTS打卡计划第九周

    Algorithms: https://leetcode-cn.com/problems/merge-two-sorted-lists/submissions/ 合并两个链表 Review:  “Pu ...

  4. ios真机调试教程(不上架App Store安装到手机)

    原文 不上架App Store安装到手机调试测试,需要用到ios真机调试证书打包的ipa才能安装到非越狱的手机使用. 2017年最新整理的ios真机调试的详细图文步骤流程,轻松的把你开发的ios ap ...

  5. ndarray的axis问题

    始终记不住np中axis是对应到哪个,还没系统地去学习下 先暂记两个常用的结果 1.[:,np.newaxis] 与 [np.newaxis, :] 注:这是ndarray才有的分片方法(np重写了[ ...

  6. 最大生成树+map实现技巧

    POJ2263 //#include<bits/stdc++.h> #include<iostream> #include<cstdio> #include< ...

  7. torch学习中的难点

    https://github.com/zergtant/pytorch-handbook/blob/master/chapter2/2.1.4-pytorch-basics-data-lorder.i ...

  8. nginx开启目录浏览,解决中文乱码问题

    nginx开启目录浏览,解决中文乱码问题 方法如下: server { listen 80; #listen [::]:80; server_name gongzi.liwenhui.xin gz.l ...

  9. [GPU] Machine Learning on C++

    一.MPI为何物? 初步了解:MPI集群环境搭建 二.重新认识Spark 链接:https://www.zhihu.com/question/48743915/answer/115738668 马铁大 ...

  10. openstack核心组件--horizon web管理界面(5)

    一.horizon 介绍: 理解 horizon Horizon 为 Openstack 提供一个 WEB 前端的管理界面 (UI 服务 )通过 Horizone 所提供的 DashBoard 服务 ...