满口金牙 2022-05-04 14:18 采纳率: 91.5%
浏览 63
已结题

Vue3, 复杂的watch实现,求解. 第二次悬赏提问了

目的,监听数组中, 某个不确定位置(自定义位置)的元素,发生改变. 自定义以外的其它元素改变 不管
请用下面测试和修改, 多谢
另外,假如用户没有自定义要监听的位置,说明可以不去监听, 好象这个功能也不好实现

<template>

<div>
    <p>数组arr:{{arr}}</p>
    <p>监听arr数组,哪个位置的元素发生改变:<input type="text" v-model="position"></p>
    <p>arr数组,{{position}}位置的元素值更改为:<input type="text" v-model="arr[position]"></p>
    <p>监听情况报告:{{info}}</p>
</div>

</template>
<script>
import { reactive,  watch, toRefs } from 'vue'
export default {
  name:'Debug',
  setup(props){
    const data =reactive({
      arr:['a','b','c','d','e'],
      position:'', // 数组中的哪个元素
      info:'', // 提示信息
    })
    // 下面出错, 
    // 下面如果监听data.arr能正常工作, 但目的是要监听arr数组中的某个不确定的元素,不是要监听所有元素
    watch(data.arr[data.position],(newValue)=>{
      console.log('发生了变化')
      data.info =  '变化为新值:'+ newValue
       //.....//
    })
    // 下面这样改也不行
    // watch(()=>{data.arr[data.position]},(newValue)=>{
    //   console.log('发生了变化')
    //   data.info =  '变化为新值:'+ newValue
    // })

    return {
      ...toRefs(data),
    }
  }
}
</script>

  • 写回答

2条回答 默认 最新

  • web修理工 2022-05-04 17:18
    关注
    
    
    <template>
    
      <div>
        <p>数组arr:{{arr}}</p>
        <p>监听arr数组,哪个位置的元素发生改变:<input
            type="text"
            v-model="position"
          ></p>
        <p>arr数组,{{position}}位置的元素值更改为:<input
            type="text"
            v-model="arr[position]"
          ></p>
        <p>监听情况报告:{{info}}</p>
      </div>
    
    </template>
    <script>
    import { reactive, watch, toRefs } from "vue";
    export default {
      name: "Debug",
      setup(props) {
        const data = reactive({
          arr: ["a", "b", "c", "d", "e"],
          position: "", // 数组中的哪个元素
          info: "", // 提示信息
        });
        // 下面出错,
        // 下面如果监听data.arr能正常工作, 但目的是要监听arr数组中的某个不确定的元素,不是要监听所有元素
        // watch(data.arr[data.position], (newValue) => {
        //   console.log("发生了变化");
        //   data.info = "变化为新值:" + newValue;
        //   //.....//
        // });
        // 下面这样改也不行
        watch(
          () => data.arr[data.position],
          (newValue) => {
            console.log("发生了变化");
            data.info = "变化为新值:" + newValue;
          }
        );
    
      
    
        return {
          ...toRefs(data),
        };
      },
    };
    </script>
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月12日
  • 已采纳回答 5月4日
  • 修改了问题 5月4日
  • 修改了问题 5月4日
  • 展开全部

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。