Vue2019-04-24

一.基础语法

vue是渐进式框架,采用自低向上的增量开发,Vue关注视图层

MVVM

Model-View-ViewModel

采用双向数据绑定,改变数据影响元素,反之亦然

如何使用vue:

        1.引入vue的核心JS文件

        2.准备Dom结构   

       3、实例化组件

            通过el属性,挂载元素,绑定id为app的html元素

            通过data属性,定义数据,可以在html代码段中显示的数据

        4、获取数据

        数据绑定最常见的形式就是使用“Mustache”语法 (双大括号) 的文本插值

例子:

1、引入Vue的核心JS文件,Vue会被当做全局变量使用

<script type="text/javascript" src="js/vue.js" ></script>

2、准备Dom结构

<div id="app">

<!--双花括号取值-->

{{msg}}

</div>

<script type="text/javascript">

3.实例化组件

var app = new Vue({

el:"#app",注:el:element的简写。挂载元素,绑定id为app的html元素

data:{ // 定义数据,可以在html代码段中显示的数据

msg:"Hello Vue!"

}

});

二,命令

1.文本渲染

指令 (Directives)

是带有 v- 前缀的特殊属性。

指令的职责是,当表达式的值改变时,将其产生的连带影响,响应式地作用于 DOM。

v-text:  显示数据,响应式(默认)  简写:{{}}

v-once:   数据只会更新一次,下次更新数据不影响dom

v-html:   可以显示html元素

v-bind:

v-bind指令可以绑定元素的属性,动态给属性赋值。

比如:v-bind:class、v-bind:style、v-bind:href形式。

v-bind的简写形式:

v-bind:属性名="组件中定义的数据"

简化为 :   :属性名="组件中定义的数据"

上边的形式可以改写成:  :class、:style、:href

2.绑定


1).class绑定

绑定DOM对象的class样式有以下几种形式:

绑定多个class

使用对象classObject绑定

使用数组classList绑定

绑定的对象可以同时切换多个class

对象和数组绑定的区别:

对象可以控制class的添加和删除;数组不能控制删除

2)、style绑定

绑定形式跟class一致:

使用内联对象Object

直接传入对象styleObject

使用数组对象styleList

3.监听事件和方法

绑定事件

语法: v-on:事件名

简写: @事件名

方法事件处理器

一般来说事件会绑定一个方法,在方法内部处理相关的事件逻辑。

需要在methods属性中定义方法,然后v-on引用对应相关的方法名。

4.event

在事件处理函数中访问DOM原生事件event对象,可以使用特殊变量$event对象传入

3.事件


1)事件修饰符

在事件处理程序中调用 event.preventDefault()(阻止元素发生默认行为) 或 event.stopPropagation()(阻止事件冒泡到父元素) 是非常常见的需求。

为了解决这个问题,Vue.js 为 v-on 提供了事件修饰符。通过由点 (.) 表示的指令后缀来调用修饰符。

例子

<div id="app">

<div @click="father">

<div @click="child">child</div>

</div>

<hr />

stop : 阻止event冒泡,等效于event.stopPropagation()

例子:

<div @click="father">

<div @click.stop="child">child</div>

</div>

<hr />

prevent : 阻止event默认事件,等效于event.preventDefault()

例子:

<a href="http://www.baidu.com" @click.prevent="prevent1">百度</a>

<hr />

capture : 事件在捕获阶段触发

例子:

<div @click.capture="father">

<div @click.capture="child">child</div>

</div>

self : 自身元素触发,而不是子元素触发


例子:

<hr />

<div @click.self="father">

father

<div @click="child">child</div>

</div>

<hr />

once : 事件只触发一次

例子:

<div @click.once="child">child</div>

例子

<script type="text/javascript">

var app = new Vue({

el:"#app",

data:{

},

methods:{

father:function(){

console.log("父元素...");

},

child:function(){

console.log("子元素...");

},

prevent1:function(){

console.log("666....");

}

}

});

2)键值修饰符


在监听键盘事件时,我们经常需要监测常见的键值。

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

.enter   .tab

.delete (捕获“删除”和“退格”键)

.esc  .space   .up.down.left.right

四.渲染


1)条件渲染

1、v-if

当条件返回true时,执行

2、v-else

当if条件不满足时,执行(要结合v-if一起使用)

3、v-else-if

当满足条件时执行(要结合v-if一起使用)

4、v-show

满足条件时显示,不满足隐藏

v-if 和 v-show

两者的区别是v-if是“真正”的条件渲染,只有为true时才会被渲染。v-if也是“惰性”的,假如初始条件为false,那么条件变为true时才会发生第一次渲染。

v-show只是CSS的display属性的切换,不论初始条件是否成立,都会进行html渲染,然后改变display的值为none或者block。

一般来说v-if开销比较大,如果需要频繁切换显示不显示使用v-show,需要进行条件判断的但是改变很少的使用v-if。

2)列表渲染

①v-for

可以把一组值进行列表渲染,语法形式: item  in items,

items 是源数据数组并且 item 是数组元素迭代的别名。

在 v-for 块中,对父作用域属性的完全访问权限。v-for 还支持一个可选的第二个参数为当前项的索引。

v-for也可以遍历对象,可以指定三个形参:

形式: v-for="(value, key, index) in object"

value: 对象的值

key: 对象的键

index: 遍历的索引

②key 属性

用 v-for 渲染列表时, 使用 key 属性给每个指定一个唯一的 ID 表示,那么可以在

下次数据渲染时,提高渲染速度。它默认用“就地复用”策略。

如果数据项的顺序被改变,重复 ID 的元素将会被再次使用,不会重新渲染。这个默认

的模式是高效的。需要用 v-bind 来绑定动态值

③、取值范围

v-for 也可以指定整数,用来重复多次使用模板

五.表单输入绑定

1.v-model

用 v-model 指令在表单控件元素上创建双向数据绑定。它会根据控件类型自动选取正确的方法来更新元素。

v-model 会忽略所有表单元素的 value、checked、selected 特性的初始值。因为它会选择 Vue 实例数据来作为具体的值。通过 JavaScript 在组件的 data 选项中声明初始值。

单个使用时v-model是逻辑值:true和false,多个一起使用需要指定value值,选中结果绑定v-model的数组。

1)文本框

<input type="text" v-model="txtMsg" placeholder="请输入用户名..." />

文本值:{{txtMsg}}

<br /><hr /><br />

2)复选框

<input type="checkbox" v-model="ck" /> &nbsp;选中状态:{{ck}}

<br />

<input type="checkbox" value="HTML5" v-model="lesson"> <label>HTML5</label>

    <input type="checkbox" value="JavaScript" v-model="lesson"> <label>JavaScript</label>

    <input type="checkbox" value="Vue" v-model="lesson"> <label>Vue</label>

    <p>多选结果:{{lesson}}</p>

    3)单选框

    <input type="radio" value="yes" v-model="love"><label>喜欢</label>

    <input type="radio" value="no" v-model="love"><label>不喜欢</label>

    <input type="radio" value="all" v-model="love"><label>都喜欢</label>

  <p>是否喜欢: {{love}}</p>

 4) 下拉框

  <select v-model="selected">

        <option>西瓜</option>

        <option>苹果</option>

        <option>菠萝</option>

    </select>

    <h3>结果: {{selected}}</h3>

</div>

</body>

<script type="text/javascript">

var app = new Vue({

        el:"#root",

        data:{

            txtMsg:"",

                ck:"",

                lesson:[],

                love:"",

                selected:""

        }

});

5)修饰符

使用v-model绑定数据后,可以使用修饰进行数据处理:

.lazy:绑定数据默认实时更新,lazy可以在onChange触发

.number:返回数字类型的值,转换不成返回NaN

.trim:去除数据的前后空格

六.定义组件


1.组件

组件 (Component) 是 Vue.js 最强大的功能之一。组件可以扩展 HTML 元素,封装可重用的代码。

2、定义组件

Vue自定义组件分为两种:全局注册和局部注册,全局组件可以在任何地方引用,局部组件只能在当前Vue实例使用。

1)全局注册

使用Vue.component(tagName, options)来定义:

1)局部注册

在Vue实例中使用components属性来定义:

注意:HTML 特性是不区分大小写的,所有在定义组件时尽量使用中划线“-”来指定组件名。

即使,使用了驼峰标示命名如:myComponent,在页面引用时仍然要使用<my-component>进行引用。

3.属性

is属性

在table标签中直接使用自定义组件,无法正常显示。DOM解析时会解析到<table>标签的外部:

原因是:table/ol/ul/select 这种html标签有特殊的结构要求,不能直接使用自定义标签。他们有自己的默认嵌套规则,比如:

table> tr> [th, td];

ol/ul > li;

select > option

4.模板

当模板的html结构比较复杂时,直接在template属性中定义就不现实了,效率也会很低,此时我们可以使用模板,定义模板的四种形式:

1)直接使用字符串定义

2)使用<script type="text/x-template">

3)使用<template>标签

4)使用.vue组件,需要使用模块加载机制

在使用直接字符串模板时、x-template和.vue组件时,不需要is进行转义。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,864评论 6 494
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,175评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,401评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,170评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,276评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,364评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,401评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,179评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,604评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,902评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,070评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,751评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,380评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,077评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,312评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,924评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,957评论 2 351

推荐阅读更多精彩内容