小白问一个 VueJs 的问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
honkew
V2EX    Vue.js

小白问一个 VueJs 的问题

  •  1
     
  •   honkew 2022-10-29 12:11:24 +08:00 2263 次点击
    这是一个创建于 1079 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我想这么写 不行

    <div v-for="item of list"> <div @click="PromptSetValue(item.it)"></div> function PromptSetValue(e){ var text = prompt(); e = text; } 

    需要这么写 才可以

    <div v-for="item of list"> <div @click="PromptSetValue(item)"></div> function PromptSetValue(e){ var text = prompt(); e.it = text; } 

    有没有什么好办法,因为还需要在其它地方用的这个方法

    9 条回复    2022-10-30 06:07:48 +08:00
    honkew
        1
    honkew  
    OP
       2022-10-29 12:34:31 +08:00
    有没有好的写法,不能引用对象的值。
    https://codepen.io/tsymq-live/pen/vYrOPYm

    希望大神帮我改改
    hay0577
        2
    hay0577  
       2022-10-29 13:12:57 +08:00
    item.it 传的是一个值...item 给的是一个对象.

    PromptSetValue 里循环列表找到对应值的对象改数据呗
    TianQian
        3
    TianQian  
       2022-10-29 13:15:48 +08:00
    Vue2 没有更好的办法
    shintendo
        4
    shintendo  
       2022-10-29 13:32:41 +08:00   3
    这跟 Vue 没有任何关系,是编程语言的传值 /传引用问题。

    第一种写法,e 是 item.it 的复制品,你给 e 赋值赋出花来也不会影响 item.id

    第二种写法,e 是 item 的复制品,但 e.ititem.id 是同一个东西,所以给 e.it 赋值就是给 item.id 赋值。

    办法就是用第二种写法。
    charlie21
        5
    charlie21  
       2022-10-29 15:06:45 +08:00
    PromptSetValue(item.it)

    function PromptSetValue (list, it) {
    var text = prompt();
    foreach (item of list) {
    if (it === item.it) { item.it = text; break; }
    }
    console.log(list) // 确认已更新
    }

    一种可能性是直接方法名变成 PromptSetValue (list, item.it) 虽然很难看
    summerLast
        6
    summerLast  
       2022-10-29 15:41:04 +08:00
    和语言无法 第一个地方的 赋值并不是给 上面迭代的 item 进行了赋值, 而是相当于把 item 的引用赋值给了 e ,如果给 e 赋值的话并不会改变原有的 item 可以理解成 a b c 持有一个 item 的引用 赋值的过程给 b 持有了一个新的引用 而非原来的医用如下面例子:
    ```
    a = {it:1};
    b = a;
    b = {it:2};
    ```
    问此时 a 的值是多少
    第二个则是 a b c 持有一个引用,并未对 a b c 修改新的引用 而是通过改引用找到 item 的属性 it 进行了赋值 如下例子
    ```
    a = {it:1};
    b = a;
    b.it = 2;
    ```
    问此时 a 的值是多少

    如果需要改变值可以传入当前元素下标 ,结合数组进行修改 this.$set(list,index,text)

    b.id = 1 b 指向 xxx 内存地址,b.it 指向 xxx 内存对应 it 的地址, 给 xxx 指向的 it 地址赋值 为 1
    b={id:1} 是指将原有 b 指向的 xxx 内存地址改为指向 新创建对象对应的 yyy 内存地址,而此时 a b 已经没有关系
    summerLast
        7
    summerLast  
       2022-10-29 15:55:22 +08:00
    两个的本质都是传值(或则叫传引用 /或则叫 copy ),传的是指针对象类型的值( copy ), 指针对象中指向了具体的对象数据和对象类型,还是以上面为例
    - 如果直接对变量赋值其含义是修改变量所指向的数据
    - 如果对指针对象指向的属性赋值含义是找到指针所指向的对象修改该对象 xx 属性指向的数据 而改对象的指针并会不变

    结合上面两条 第一个写法是修改变量所指向的值, 而变量只是容器 ,好比里面放到是身份证号; e 和 item 是两个容器 对 e 容器修改里面的数据(身份证号)并不影响 item 容器里面的值
    而第二个是拿着相同的身份证号找到对应的人(如:张三)对他进行涂抹
    arnosolo
        8
    arnosolo  
       2022-10-29 16:06:30 +08:00
    我一般是这么写的, 标不标准咱也不知道, 反正用是能用.

    interface Cat {
    name: string;
    weight: number;
    }

    const cats = reactive<Cat[]>([
    {
    name: 'mimi',
    weight: 5,
    },
    ])

    function addCatWeight(name: string, weight = 1) {
    const cat = cats.find((cat) => cat.name === name);
    if(cat) {
    cat.weight += weight
    }
    }

    function setFoodSupply(name: string, supply: number) {
    cats.find((cat) => cat.name === name)
    }

    <ul>
    <li v-for="cat of cats" :key="cat.name" @click="addCatWeight(cat.name)">
    {{ cat.name }}.weight = {{ cat.weight }}
    </li>
    </ul>
    Sunzehui
        9
    Sunzehui  
       2022-10-30 06:07:48 +08:00
    继续拆,不要怕
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5860 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 03:22 PVG 11:22 LAX 20:22 JFK 23:22
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86