watch监听
Vue监听属性有很多种写法,也有几个配置选项
使用配置项
new Vue({
watch:{
content:{
handler(old,newVal){
console.log(old,newVal)
},
deep:true,
immediate:true
}
}
})
- deep:是一个布尔类型,告诉Vue以递归的方式监听嵌套对象内部值的变化。
- 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
时定制prop
和event
。默认情况下,一个组件上的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>
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· ThreeJs-16智慧城市项目(重磅以及未来发展ai)
· .NET 原生驾驭 AI 新基建实战系列(一):向量数据库的应用与畅想
· Ai满嘴顺口溜,想考研?浪费我几个小时
· Browser-use 详细介绍&使用文档
· 软件产品开发中常见的10个问题及处理方法