当前位置: 首页 > 网络应用技术

[源代码分析]请参阅$ set添加响应属性

时间:2023-03-06 16:31:09 网络应用技术

  大家好,在上一篇文章中,我们在MVVM中了解了MVVM的原理,并使用一个非常简单的案例模拟mvvvm.today的基本过程,我们将继续学习$vue2。在分析源代码之前,让我们看看为什么使用此$ SET方法以及为什么有这样的方法。

  每个人都知道:响应是VUE的最大功能之一。例如,当我们修改数据中定义的值时,属性(名称)的相应页面将被同步。修改元素,相应的绑定属性名称也将同时更新)。

  但是,这种情况也是有条件的,前提是必须在数据中预先定义属性。

  还有另一种情况,我们使用一种情况来模拟:例如,在数据中定义一个包含名称属性的OBJ对象,然后通过胡须语法在页面上显示对象,那么毫无疑问,这无疑是必须在两条响应中修改名称属性,如以下代码和效果图所示:

  现在还有另一个新需求:要求我们通过单击一个按钮将年龄属性添加到OBJ对象中。似乎很简单,也就是说,在页面上添加一个按钮并绑定单击事件,然后在bindingAdadd上绑定年龄属性,在事件中与OBJ绑定,如下所示:

  但是,当我们运行代码以发现单击按钮没有反应时,似乎没有成功添加年龄属性,然后打开控制台并发现年龄实际上添加了它,但这不是一个响应(那里没有三点)。据说尽管已经成功添加了年龄,但没有被劫持,因此不能在两个方向上绑定。如下所示:

  这是因为VUE仅携带初始化时仅定义一次的数据,并且稍后添加的属性将不执行。这就是成功添加年龄属性但不是响应的原因。

  因此,如果我们只想动态添加一个响应式属性,当然,没有办法。为了解决此问题,Vue为我们提供了一种特别用于添加响应属性$ SET的其他方法,这是我们的核心我们想分享这次(如此多的主角终于出来了)。贝洛(Below)我们更改this.obj.age = 18至18,以添加$设置的形式以查看效果:

  改变这种方式后,让我们看一下页面上新添加的年龄属性。

  通过上述情况,我们知道我们可以通过$集添加对属性的响应,那么它的实施原则是什么?在下面,我们使用$设置的源代码来解释:下载到VUE2源代码并查找SRC/CORE/INSPENS/observer/index.js文件,以下代码片段是$ set的源代码。总计30中看起来更简单。

  今天通过简单的案例分析分享我们。如果将响应属性添加到对象中,则会导致VUE中的$ SET方法。通过对$ SET源代码的分析,我们知道$ SET的实现原理。$ SET可以添加响应属性。

  原始:https://juejin.cn/post/7101847136685260837