2022/3/21-2022/3/22

2022/3/21
今天在写代码的时候遇到了一个bug,就是当我打开表格弹窗,第一次可以修改数据,重新打开再也修改不了数据,
不知道问题出在哪里,于是就在Object.assign后面加上了 this.subform = JSON.parse(JSON.stringify(this.subform));就可以了
大概就是:

  getsubArg().then(response => {
          //修改以秒为单位的时间值,把ms改成s
            response.data.maxDiffTime = response.data.maxDiffTime/1000;
             response.data.minDiffTime = response.data.minDiffTime/1000;
             Object.assign(this.subform,response.data);
             this.subform = JSON.parse(JSON.stringify(this.subform));
             console.log(this.subform,'response.data')
            this.loading=false;
          }).catch(err => {
             this.msgError(err);
          });

问题描述:element的el-form表单数据绑定或者回显后无法编辑修改

因为切换菜单的时候页面并不会刷新,列表也不会更新,因此要用activated钩子函数。

**activated()** {
     this.loading=true;
     this.getList();
     console.log('触发')
  },

vue2:
在main.js中,通过vue.prototype.xx = …
之后就可以this.xx直接使用该方法or属性。
举例,在main.js中,有:

Vue.prototype.msgInfo = function(msg) {
  this.$message.info(msg);
};

那么以后在不同js文件都可以通过this.msgInfo来使用该方法了。
vue.prototype.xx就是一个注册,它能注册到vue上。(终于知道注册啥意思了)因为一整个软件就是vue应用,
this就指代vue了。

2022/3/22
如果对象有一个属性,它是computed,那么它的类型是number。
在typescript中,可以对对象进行类型检查。

比如

interface DataProps {
      count:number;
      double:number;
      increase:()=>void;
}
export default {
     setup(){
         const data:DataProps= reactive({
           count:0,
           increase:()=>{data.count++}
           double:computed(()=>data.count*2)
        })
    }
}

(在return中,return {…data} ,那么在ui界面就可以直接通过count,increase获取数据,而不是data.count,data.increase
这个对象也是vue3的compositionapi特点。(但是仅以…data返回是不可以的,因为里面的数据并不具备响应式)
所以是: const refData = toRefs(data) return {…refData} (注意,toRefs来自于
import { toRefs } from ‘vue’)

reactive的使用:

const count = ref(0)
const double = computed(()=>return count.value*2)
const increase = ()=>{ count.value++}

变成data
注意:reactive属性单独被拎出来就失去了响应性,就比如函数里有对象.属性,函数等于reactive,
失去函数,对象.属性不在管制范围内,即不在函数作用域内,就没有函数作用。
reactive相当于一个响应式函数,离开这个函数就不具备响应式了。
从data
变成refData
最后返回 …refData

好像知道vue2为什么双向绑定原理是object.defineProperty了,准备来说是它加上 发布者订阅模式。
单从object.defineProperty来讲,它并没有实现双向绑定,但是它能监听对象属性的变化,然后改成最新值。并且能监听获取跟设置段,并作为信息显示。
然后双向绑定就是拿这些信息显示,根据发布者订阅模式通知vue发生数据变化。
这才是vue2双向绑定原理:Object.defineProperty加观察者模式。

vue3用的是new Proxy,和Object.defineProperty不同的是它是直接监听对象的属性,这样就是实时
监听到更改数据时的变化了。当变化对象属性时就会触发set。

watch监听属性:第一个参数接收的是需要观察发生变化的变量,第二个参数是一个回调函数。
举例:

watch([greeting,data],(newValue,oldValue)=>{
        console.log('old',oldValue)
        console.log('new',newValue)
}

现在打印的old,new的值都是数组,[greeting,data]
监听多个变量用数组概括,监听一个变量就直接watch(greeting,(old,new)=>{})

关于监听reactive对象的属性:(对象属性缺乏响应式)解决方案:
注意,watch需要监听响应式数据,或者函数类型,array,object,所以如果数据非响应式数据,
比如data.count(reactive(data)),它不是响应式数据。
那么就将data.count用箭头函数包裹一下就行,这样就能监听了
watch(()=>data.count,(newValue,oldValue)=>{}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值