Vue 指令

总结下vue的语法,虽然文档都能查到,但偏于教程不易查找。

1.内容绑定 {{}}

双大括号绑定内容,微信小程序也是这样。支持js表达式。
<div>{{message}}</div>

双大括号输出的仅是字符串,可以用v-html将其转化为html代码,类似危险html操作。

2.元素属性绑定 v-bind

v-bind:属性名称??梢运跣闯? :属性名称
可以将元素的属性与vue实例的数据进行单向绑定,即:数据变化界面会刷新,但界面上的变化不会更新vue实例中的数据??梢杂梅嚼ê攀迪侄蠖ā?/p>

示例

<input v-bind:value="message"/>
<input :value="message"/>
// 动态绑定
<input v-bind:['value']="message"/>

2.5表单输入双向绑定 v-model

// 这样在input框输入内容时候会一起修改vue实例中的message变量
<input v-model="message" placeholder="edit me">
// 其实上面这个v-model等同于一个v-bind与v-on组合
<input
  v-bind:value="searchText"
  v-on:input="searchText = $event.target.value"
>
// 自定义组件内部需要有一个名为value的props,并且将其绑定到自己的模板中某个输入框的value属性上。
Vue.component('custom-input', {
  props: ['value'],
  template: `
    <input
      v-bind:value="value"
      v-on:input="$emit('input', $event.target.value)"
    >
  `
})
// 然后就可以使用v-model了
<custom-input  v-model="message" />
// 上面这个基于value属性和input事件的绑定是默认行为,可以通过在组件中加入model属性进行修改
Vue.component('base-checkbox', {
  model: {
    prop: 'checked',
    event: 'change'
  },
  props: {
    checked: Boolean
  },
  template: `
    <input
      type="checkbox"
      v-bind:checked="checked"
      v-on:change="$emit('change', $event.target.checked)"
    >
  `
})

2.6 在自定义组件上使用v-model的问题

注意是组件上,不是组件中。类似react自定义组件中,将值通过props传入组件,在组件内部适当时候通过callback的方式通知父组件,然后父组件在setState改变这个值,然后由于setstate会刷新父组件,最后修改过的值又传回给子组件。这个过程在react中比较繁琐。Vue中可以通过v-model简单实现。但是有时候这种子组件可以改变父组件值的行为会产生一些问题,并且隐藏了改变的过程,有些时候希望在chagne的时候顺便做些其他事情,这种自动的方式就不合适了。

3.事件监听 v-on

v-on:事件名称??梢运跣闯? @事件名称
将元素的事件与vue实例的方法绑定。同样支持动态。

示例1 原生html元素的事件监听

<div v-on:click="sayHello" />
<div @click="sayHello" />
// 动态
<div v-on:['click']="sayHello" />

示例2vue组件的事件监听
可以通过v-on:event-name 来监听vue组件中的事件,在被监听组件内部通过this.$emit('event-name)发送事件,注意vue中推荐使用kebab-case的形式命名事件,不使用驼峰命名法,因为都会被转为小写。

<my-component v-on:my-event="doSomething"></my-component>
// 内部emit发送事件,可携带参数
Vue.component('base-checkbox', {
  model: {
    prop: 'checked',
    event: 'change'
  },
  props: {
    checked: Boolean
  },
  template: `
    <input
      type="checkbox"
      v-bind:checked="checked"
      v-on:change="$emit('change', $event.target.checked)"
    >
  `
})

但是有时候仅仅想监听一下这个组件的click事件,这时候在组件内部通过emit的方式就有点繁琐了,这时候可以使用v-on的 .native修饰符。

<my-component v-on:click.native="onClick"></my-component>

注意这里只是监听了组件内部根元素的事件,也就是说根元素必须有这个事件,如根元素是个div此时监听他的input事件是不行的。

4.条件渲染 v-if 、v-else-if、v-else与v-show

当条件为truthy的时候才渲染一个???。v-else-if、v-else必须紧根 v-if后面,否则无效。

<h1 v-if="awesome">Vue is awesome!</h1>
<h1 v-else>Oh no ??</h1>

也可以一次性判断多个???,外面套个template元素,这个template即看不见也不影响布局,微信小程序里面同样的元素叫做black。

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

v-show与v-if差不多,区别是v-show不支持template也不支持else啥的,最重要的是v-show和css中visibility属性类似,元素即使不显示的时候也占有空间。

5.循环渲染 v-for

实现类似react中用基于某个数组使用map循环渲染一个列表的功能。

// items是vue实例中的数据源,item是别名,index是索引。和react一样这里最好给个唯一key,便于更新和重用。
<ul id="example-2">
  <li v-for="(item, index) in items"  :key="item.id">
    {{ index }} - {{ item.message }}
  </li>
</ul>

// 也可以使用template
<ul>
  <template v-for="item in items">
    <li>{{ item.msg }}</li>
    <li class="divider" role="presentation"></li>
  </template>
</ul>

在vue组件上使用v-for的时候要把item作为属性绑定到组件的prop,item不会自动传进组件。

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

推荐阅读更多精彩内容

  • 注意: 1、所谓指令,其实就是元素的属性 2、所有的指令,前提是在js中声明了是Vue对象 3、参数 1、静态参数...
    张浩琦阅读 328评论 0 0
  • 开篇 1.什么是Vue?Vue.js是一套构建用户界面的框架,它不仅易于上手,还可以与其它第三方库整合(Swipe...
    Gmn_微双阅读 310评论 0 0
  • 最近做的项目,一直用的Angular6.0框架,期间陆陆续续完成了三四个项目。业务知识有一定的提升,但是一直用一个...
    月上秦少阅读 1,268评论 0 4
  • 1.文本渲染 v-text:更新元素的innerTextv-html:更新元素的innerHTMLv-once:静...
    John_Phil阅读 533评论 0 0
  • v-text 预期:string 详细: 更新元素的textContent。如果要更新部分的textContent...
    JK丶帝阅读 169评论 0 0