vue——set方法

Vue中的set方法

【set方法既是一个Vue的全局方法,它也是一个实例方法。】

1、对象使用:

(1)全局方法:Vue.set(vm.userInfo,“address”,“beijing”)(对象名,键名,键值)
(2)实例方法:vm.$set(vm.userInfo,“address”,“beijing”)

2、数组使用:

(1)全局方法:Vue.set(vm.userInfo,2,10)(数组名,下标,新的数据)
(2)实例方法:vm.$set(vm.userInfo,3,8)

<div id="app">
		<!-- 改变对象数据 -->
		<div v-for="(item,key,index) of userInfo">
			{{item}}----{{key}}----{{index}}
		</div>

		<!-- 改变数组数据 -->
		<div v-for="(num,index) of listNum">
			{{num}}
		</div>
	</div>
	<script>
		var vm = new Vue({
			el:'#app',
			data:{
				userInfo:{
					name:"sally",
					age:31,
					gender:"male",
					salary:"secret"
				},
				listNum:[1,2,3,4]
			}
			
		})
		//对象中使用Set方法
		Vue.set(vm.userInfo,"address","beijing");//set全局方法
		vm.$set(vm.userInfo,"love","seben");//set实例方法

		//数组中使用Set方法
		Vue.set(vm.listNum,2,10);
		vm.$set(vm.listNum,4,20);
vue中改变数据,页面跟着变方式总结:
数组有三种方式:

1、直接改变数组的引用

2、调数组的变异方法

3、set方法

对象有两种方式:

1、直接改变对象的引用

2、set方法

03-16
### Vue.js 中 `$set` 方法的使用说明 Vue.js 提供了一个名为 `$set` 的方法,用于向响应式对象动态添加新属性并确保该属性也是响应式的。如果直接在一个已经创建的对象上添加新的属性,则这个新属性不会触发视图更新,因为 Vue 无法检测到它[^1]。 #### 基本语法 `this.$set(target, key, value)` 其中: - `target`: 要修改的目标对象或数组。 - `key`: 如果目标是一个对象,则表示新增属性的名字;如果是数组,则表示索引值。 - `value`: 新增属性对应的值。 此方法是全局方法 `Vue.set` 的别名,在组件内部可以通过 `this.$set` 访问[^3]。 --- #### 示例代码 以下是几个典型的 `$set` 使用场景: ##### 场景一:为对象动态添加属性 假设有一个初始的数据对象如下: ```javascript data() { return { user: {} }; } ``` 此时尝试直接为 `user` 添加一个新的属性 `name` 并期望其具有响应性是不会生效的。可以改用 `$set` 来实现这一需求: ```javascript this.$set(this.user, 'name', 'Alice'); console.log(this.user.name); // 输出 Alice ``` 上述操作不仅成功设置了 `name` 属性,还使得 `name` 成为了一个响应式属性[^4]。 ##### 场景二:更改数组中的某一项 对于数组来说,某些变异方法(如 `push`, `pop`, `splice` 等)会被 Vue 自动拦截从而保持响应性,但如果通过索引来直接替换某个元素则不会触发更新。这时可以用 `$set` 解决这个问题: ```javascript let items = ['a', 'b', 'c']; // 错误方式 (不具响应性) items[1] = 'd'; // 正确方式 (具响应性) this.$set(items, 1, 'e'); console.log(items); // ["a", "e", "c"] ``` 以上例子展示了如何利用 `$set` 更新数组项的同时维持响应机制[^5]。 --- #### 工作原理分析 当我们将一个普通的 JavaScript 对象传递给 Vue 实例作为它的 `data` 选项时,Vue 会遍历所有的属性并通过 `Object.defineProperty` 把它们转换成 getter 和 setter 形式。然而这种处理仅限于初始化阶段完成后的现有属性。因此任何之后才加入的新成员都不会自动成为观察者的一部分——除非借助像 `$set` 这样的工具手动介入。 --- #### 官方文档链接 更多关于 `$set` 的细节可以从官方指南获取更多信息:<https://vuejs.org/v2/guide/reactivity.html#For-Objects> --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值