续上一篇文献“Vue模板项和数据项“,继续表述我对Vue选项对象的理解,数据项一共就2项:data、props,但我需要的是短而细致,现在让我们来看看data和props在Vue实例中是如何运作的。
data选项,它的值类型可以为:数值、字符串、对象、BOOL值,一般情况下,Vue的值类型都为对象,因为其他的数据类型Vue不会代理,(代理)也就是说不会对视图层的变量进行数据绑定,只有值类型为对象才能绑定:
这里我直接将字符串赋值给Vue实例v的属性data,接下来看看视图层是怎么显示的
上图说明Vue实例的data属性不会出现数据数据绑定的情况,至少现在是这样。
根据上文稍微调整一下,我们将字符串放在对象中然后试一试
同时我也在对应挂载元素中将$data改成了text
同上文一样,在控制台调用了Vue实例改变属性值,这一次Vue的数据绑定成功了。同上文不同的是,这次我将Vue实例v的值类型改成了对象并在对象中添加属性text,然后Vue对对象中的属性text进行了代理,由此可以得出结论:Vue实例只对data中值类型为对象中的属性进行数据绑定。
我还发现一个很有趣的现象:Vue会对代理对象的对象进行绑定和封装
在上图,我在外部声明了一个对象b并将他放在实例v中,然后看看控制台的输出
众所周知,一个纯Object对象根本不长这样,尽管如此,我还是上网查了一下__ob__是什么,然后才知道:ob 会指向一个Observer对象,每个被 双向绑定
的对象元素(数组也是对象)都会有一个__ob__,而且是单例的,具体单例内容不符合本文主题,就不多叙述。
那现在再来提个问题:这个对象b还是原来的那个对象吗,是重新封装的还是在现有对象前提下封装的?
我先使用变量c指向b的对象,然后使用Vue代理b,最后再输出
通过控制台的输出,我们会发现console.log©的结果和52~54的结果都是一模一样的,由此得出结论就是,Vue代理对象b的过程中,也对对象b进行了封装,在这里我做出假设:对对象b的封装很有可能和视图层的数据绑定有关系。
最后是props选项,值类型可以是单个字符串或字符串数组,它可以通过给定的prop属性获取挂载元素中的数据,同data一样,也需要在初始化时预设好。
如图组件化对于所有的Vue实例指定的挂载元素都有效,只要挂载元素都有指定的标签即可生效(如33行,指定的标签为msg)
以上就是我对Vue数据项的理解。