前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Web前端-Vue.js必备框架(四)

Web前端-Vue.js必备框架(四)

作者头像
达达前端
发布2019-07-03 15:21:35
1.6K0
发布2019-07-03 15:21:35
举报
文章被收录于专栏:达达前端达达前端

Web前端-Vue.js必备框架(四)

计算属性:

代码语言:javascript
复制
<div id="aaa">
  {{ message.split('').reverse().join('') }}
</div>
代码语言:javascript
复制
<div id="b">
  <p>dashu: "{{ aaaa}}"</p>
  <p>dashu: "{{ ddd}}"</p>
</div>
var vm = new Vue({
  el: '#b',
  data: {
    aaaa: 'Hello'
  },
  computed: {
    ddd: function () {
      return this.message.split('').reverse().join('')
    }
  }
})
代码语言:javascript
复制
<p>{{ rMessage() }}</p>

methods: {
  rMessage: function () {
    return this.message.split('').reverse().join('')
  }
}

watch回调:

代码语言:javascript
复制
<div id="demo">{{ fullName }}</div>
var vm = new Vue({
  el: '#demo',
  data: {
    firstName: 'da',
    lastName: 'shu',
    fullName: 'da shu'
  },
  watch: {
    firstName: function (val) {
      this.fullName = val + ' ' + this.lastName
    },
    lastName: function (val) {
      this.fullName = this.firstName + ' ' + val
    }
  }
})
代码语言:javascript
复制
var vm = new Vue({
  el: '#demo',
  data: {
    firstName: 'da',
    lastName: 'shu'
  },
  computed: {
    fullName: function () {
      return this.firstName + ' ' + this.lastName
    }
  }
})
代码语言:javascript
复制
computed: {
  fullName: {
    // getter
    get: function () {
      return this.firstName + ' ' + this.lastName
    },
    // setter
    set: function (newValue) {
      var names = newValue.split(' ')
      this.firstName = names[0]
      this.lastName = names[names.length - 1]
    }
  }
}

数据发生变化,执行异步或开销大的操作:

效果

效果

代码语言:javascript
复制
// 绑定属性
<div v-bind:class="{ active: isActive }"></div>

<div
  class="static"
  v-bind:class="{ active: isActive, 'text-danger': hasError }"
></div>

data: {
  isActive: true,
  hasError: false
}
代码语言:javascript
复制
<div v-bind:class="classObject"></div>
data: {
  classObject: {
    active: true,
    'text': false
  }
}

计算属性:

代码语言:javascript
复制
<div v-bind:class="classObject"></div>
data: {
  isActive: true,
  error: null
},
computed: {
  classObject: function () {
    return {
      active: this.isActive && !this.error,
      'text-danger': this.error && this.error.type === 'fatal'
    }
  }
}
代码语言:javascript
复制
// 数组
<div v-bind:class="[activeClass, errorClass]"></div>
data: {
  activeClass: 'active',
  errorClass: 'text'
}

自定义组件:

代码语言:javascript
复制
Vue.component('my-component', {
  template: '<p class="foo">Hi</p>'
})

<my-component class="boo"></my-component>
代码语言:javascript
复制
<div v-bind:style="styleObject"></div>
data: {
  styleObject: {
    color: 'red',
    fontSize: '10px'
  }
}

key的重要:

效果

代码语言:javascript
复制
// 每次渲染key都会被重新渲染
<template v-if="loginType === 'username'">
  <label>Username</label>
  <input placeholder="username" key="username-input">
</template>
<template v-else>
  <label>Email</label>
  <input placeholder="email address" key="email-input">
</template>

v-ifv-showv-if为销毁和重建,只有为真才渲染,v-show会渲染,频繁切换使用v-show

key:

代码语言:javascript
复制
<div v-for="item in items" :key="item.id">
</div>

方法:

代码语言:javascript
复制
push();
pop();
shift();
unshift();
splice();
sort();
reverse();
代码语言:javascript
复制
Vue.set(object, key, value)

Vue.set(vm.userProfile, 'age', 27)

vm.$set(vm.userProfile, 'age', 27)

<my-component v-for="item in items" :key="item.id"></my-component>

<my-component
  v-for="(item, index) in items"
  v-bind:item="item"
  v-bind:index="index"
  v-bind:key="item.id"
></my-component>

效果

事件修饰符:

代码语言:javascript
复制
.stop
.prevent
.capture
.self
.once
.passive

效果

代码语言:javascript
复制
// 点击事件将只会触发一次 
<a v-on:click.once="doThis"></a>

效果

代码语言:javascript
复制
.enter
.tab
.delete
.esc
.space
.up
.down
.left
.right
代码语言:javascript
复制
.ctrl
.alt
.shift
.meta
.left
.right
.middle
代码语言:javascript
复制
<input v-model="message" placeholder="dashucoding">
<p> {{ message }}</p>

修饰符:

代码语言:javascript
复制
.lazy input事件触发后将输入框的值与数据进行同步
代码语言:javascript
复制
<input v-model.lazy="msg">
代码语言:javascript
复制
<input v-model.number="age" type="number"> 用户的输入值转为数值类型
代码语言:javascript
复制
过滤输入的首尾空白字符 <input v-model.trim="msg">
代码语言:javascript
复制
Vue.component('blog', {
  props: ['title'],
  template: '<h3>{{ title }}</h3>'
})

结言

好了,欢迎在留言区留言,与大家分享你的经验和心得。

感谢你学习今天的内容,如果你觉得这篇文章对你有帮助的话,也欢迎把它分享给更多的朋友,感谢。

作者简介

达叔,理工男,简书作者&全栈工程师,感性理性兼备的写作者,个人独立开发者,我相信你也可以!阅读他的文章,会上瘾!,帮你成为更好的自己。长按下方二维码可关注,欢迎分享,置顶尤佳。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.03.19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 结言
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档