我想这么写 不行
<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;
}
有没有什么好办法,因为还需要在其它地方用的这个方法
1
honkew OP |
2
hay313955795 2022-10-29 13:12:57 +08:00
|
3
TianQian 2022-10-29 13:15:48 +08:00
Vue2 没有更好的办法
|
4
shintendo 2022-10-29 13:32:41 +08:00 3
|
5
charlie21 2022-10-29 15:06:45 +08:00
|
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 已经没有关系 |
7
summerLast 2022-10-29 15:55:22 +08:00
两个的本质都是传值(或则叫传引用 /或则叫 copy ),传的是指针对象类型的值( copy ), 指针对象中指向了具体的对象数据和对象类型,还是以上面为例
- 如果直接对变量赋值其含义是修改变量所指向的数据 - 如果对指针对象指向的属性赋值含义是找到指针所指向的对象修改该对象 xx 属性指向的数据 而改对象的指针并会不变 结合上面两条 第一个写法是修改变量所指向的值, 而变量只是容器 ,好比里面放到是身份证号; e 和 item 是两个容器 对 e 容器修改里面的数据(身份证号)并不影响 item 容器里面的值 而第二个是拿着相同的身份证号找到对应的人(如:张三)对他进行涂抹 |
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> |
9
Sunzehui 2022-10-30 06:07:48 +08:00
继续拆,不要怕
|