watch监听

Vue监听属性有很多种写法,也有几个配置选项

使用配置项

new Vue({
watch:{
content:{
handler(old,newVal){
console.log(old,newVal)
},
deep:true,
immediate:true
}
}
})
  1. deep:是一个布尔类型,告诉Vue以递归的方式监听嵌套对象内部值的变化。
  2. immediate:是一个布尔值类型,会立即触发而调用处理函数,而不用等到属性值第一次发生变化时才调用。

以上两个值默认值都为false,不需要的时候完全可以忽略。使用下面这种方法。

new Vue({
watch:{
content(old,newVal){
console.log(old,newVal)
}
}
})

或者还可以这样写

new Vue({
watch:{
content:"watchContent"
},
methods:{
watchContent(val,oldVal){
console.log(val,oldVal)
}
}
})

在使用immediate的时候,由于是自动触发,这样会导致旧值为undefined,这一点需要格外注意。

component 使用

在做项目中,可能会有一些情况,比如:弹窗里面可能有很多东西,这样的话需要写N个弹窗来支撑业务,否则就需要把所有的组件全部写在一个弹窗里面,但是这样会造成代码的混乱。

解决方案:

abc.vue

<template>
<div>
我是 abc
</div>
</template>

app.vue

<template>
<alert v-if="componentName">
<component :is=" 'q-'+componentName "/>
</alert>
</template> <script>
export default {
data(){
return {
componentName:null
}
}
}
</script>

组件内model属性

Vue 2.2.0推出model属性用来让使用者在组件中自定义触发v-model的触发时机,在没有推出该api之前默认使用input事件触发v-model更新。

官网解释:

允许一个自定义组件在使用v-model时定制propevent。默认情况下,一个组件上的v-model会把value用作prop且把input用作event,但是一些输入类型比如单选框和复选框按钮可能想使用value prop来达到不同的目的。使用model选项可以回避这些情况产生的冲突。

实例:

children:

export default {
/**
* 自定义v-model
*/
model: {
// v-model默认绑定的值
prop: "modelList",
// 当组件使用v-model的使用使用change事件触发,原来没有更改的使用使用input事件触发
event: "change"
},
props:{
modelList:{
type:Array,
default:() => []
}
},
methods:{
changeModel(){
let newList = [1,2,3];
this.$emit("change", changeModel);
}
}
}

parent

<template>
<children v-model="newList"/>
</template>
export default {
data(){
return {
newList:[]
}
},
watch:{
newList:{
handler(old,newVal){
console.log(old,newVal)
},
deep:true
}
}
}

大致使用就是这样,当Children组件遇到this.$emit("change")事件时候,会把接收到的参数,通过v-model实现数据绑定。

全局方法以及插件编写

在vue中拓展自己的插件供项目使用。

myGlobalMethod .js

export default {
install(Vue, options) {
Vue.myGlobalMethod = function () { // 1. 添加全局方法或属性,如: vue-custom-element
// 逻辑...
} Vue.directive('my-directive', { // 2. 添加全局资源:指令/过滤器/过渡等,如 vue-touch
bind (el, binding, vnode, oldVnode) {
// 逻辑...
}
...
}) Vue.mixin({
created () { // 3. 通过全局 mixin方法添加一些组件选项,如: vuex
// 逻辑...
}
...
}) Vue.prototype.$myMethod = function (options) { // 4. 添加实例方法,通过把它们添加到 Vue.prototype 上实现
// 逻辑...
}
}
}

main.js

import Vue from "vue";
import myGlobalMethod from "./plugin/myGlobalMethod.js";
Vue.use(myGlobalMethod);
this.$myMethod();

函数式组件

函数式组件是无状态的,而且不能使用this,因此render函数获得了一个新的context上下文参数,包含prop,事件监听,字内容,插槽以及一些其他数据。

export default {
functional:true,
render(h,{props,children}){
return h(`h${props.livel}`,children)
}
}

可以使用模板的functional替换掉functional:true

<template functional>
<div>{{props.message}}</div>
</template>

Vue 使用技巧手记的更多相关文章

  1. vue的技巧代码

    转载:https://segmentfault.com/a/1190000014085613 第一招:化繁为简的Watchers 场景还原: created(){ this.fetchPostList ...

  2. vue小技巧之偷懒的文件路径——减少不必要的代码

    众所周知,我们写vue项目的时候都会创建很多个文件,尤其是一些中大型项目,会有很深的文件夹,当你去引入的时候,要写很长的路径比如我要引入一个css文件, 必须得 import  '../../../s ...

  3. vue 使用技巧总结 18.11

    前言: 在大概学完 vue 整体框架后,有幸接触到花裤衩大神写的 vue-elementUI-admin 模板框架,把这个模板框架当作 demo,跟着 code 一遍,最大的收获是在以逻辑简单的模板熟 ...

  4. Vue 开发技巧或者说Vue知识点梳理(转,自个学习)

    Vue 组件通讯 ——常见使用场景可以分为三类: 父子通信: 父向子传递数据是通过 props,子向父是通过 events($emit):通过父链 / 子链也可以通信($parent / $child ...

  5. Vue 开发技巧总结

    ​博客地址:https://ainyi.com/95 本人玩了 Vue 两年多,在此总结一下开发时的一些技巧和方法 自定义组件 v-model v-model 是 Vue 提供的一个语法糖,它本质上是 ...

  6. vue使用技巧(分页、nextTick、复制对象)

    分页技巧 v1.0+ 版本的时候使用过滤器 limitBy 实现 v2.0+ 版本的时候使用compute使用 slice 方法实现 data:{ pageNum:10 }, computed:{ n ...

  7. Vue小技巧-懒加载

    Vue懒加载包括图片懒加载与路由懒加载 1.图片懒加载: 首先安装 vue-lazyload包 然后导入并加载事先下载好的加载图片 import VueLazyLoad from 'vue-lazyl ...

  8. 教你一个vue小技巧,一般人我不说的

    本文由云+社区发表 1. 需求 最近的项目中,需要实现在vue框架中动态渲染带提示框的单选/多选文本框,具体的效果如下图所示,在输入框聚焦时,前端组件通过接收的kv参数渲染出选项,用户点击选项,可以将 ...

  9. vue 使用技巧总结 19.01

    组件中箭头函数的使用 不要使用箭头来定义任意生命周期钩子函数: 不要使用箭头来定义一个 methods 函数: 不要使用箭头来定义 computed 里的函数: 不要使用箭头定义 watch 里的函数 ...

随机推荐

  1. 《JAVA程序设计》_第十周学习总结

    一.学习内容 12.1进程与进程 程序是一段静态的代码,进程是程序的一次动态执行过程,这个过程也是进程本身从产生.发展至消亡的过程. 线程不是进程,是比进程更小的执行单位.但与进程不同的是,线程的中断 ...

  2. SSM项目实战 之 Shiro

    目录 Shiro 概述 shiro核心概念 核心类 整体类图 主要概念 Shiro架构 认证 什么是认证 关键对象 使用ini完成认证 认证流程 自定义realm 散列密码 授权 什么是授权 使用in ...

  3. Git创建与合并分支,撤销修改

    git回滚到指定版本并推送到远程分支(撤销已提交的修改,并已push) git reset --hard <commit ID号> git push -f git回滚到上一个版本并推送到远 ...

  4. oracle/mysql java jdbc类型映射

    MySQL数据类型 JAVA数据类型 JDBC TYPE 普通变量类型 主键类型 BIGINT Long BIGINT 支持 支持 TINYINT Byte TINYINT 支持 不支持 SMALLI ...

  5. jq select change下拉框选项变化判断选中值,添加(attr)或移除(removeAttr)一个或多个属性

    select change下拉框选项变化判断选中值,添加(attr)或移除(removeAttr)一个或多个属性 $("#IsRecommend").change(function ...

  6. CEF CefSettings 结构体 详解

    1. single_process: 设置为ture时,browser和render使用同一个进程.Chromium 不正是支持此运行模式,并且不如默认的多进程稳定. 2. no_sandbox: 沙 ...

  7. Python - Django - AJAX 实现 POST 请求

    index.html: <input type="text" id="i1">+ <input type="text" i ...

  8. [LeetCode] 146. LRU Cache 近期最少使用缓存

    Design and implement a data structure for Least Recently Used (LRU) cache. It should support the fol ...

  9. intellij idea搭建SpringBoot

    1.安装mavn在settings.xml设置下载链接 <mirror> <id>nexus-aliyun</id> <mirrorOf>*,!jeec ...

  10. 为什么选择.NETCore

     为什么选择.NETCore? 学习新的开发框架是一项巨大的投资.您需要学习如何在新框架中编写,构建,测试,部署和维护应用程序.作为开发人员,有许多框架可供选择,很难知道什么是最适合的.即使您正在使用 ...