组件(一)
什么是组件
- 组件可以扩展 HTML 元素,封装可重用的代码。
组件是对原始HTML进行一层封装,来拓展它的能力。
- 在较高层面上,组件是自定义元素,Vue.js 的编译器为它添加特殊功能
vue的编辑器到底为元素添加了什么功能?我觉得可以绑定到元素上的东西,都是为它添加的功能,而这些功能是原始html不具备的。
- 所有的 Vue 组件同时也都是 Vue 的实例,所以可接受相同的选项对象(除了一些根级特有的选项) 并提供相同的生命周期钩子
这句话不太理解,是不是每一个组件都有自己的vue实例,因为他们都是vue的实例。选项对象又是什么?是不是每个组件有的对象? 如:template、data、methods等这些东西?所以每个组件都有自己的生命周期。不太理解。
全局注册&局部组件
我查了一下,全局组件好像指:所有的vue实例都可以访问。在任何地方都可以直接用。
类似于全局安装变量,应该是少用,除非所有组件都能够用到的组件可以注册到全局组件。那么我们写过的组件就不是全局组件,应为组件之间不能直接访问,都需要引过来,components中注册都使用。是这个意思吧?话说vue-cli怎么注册全局组件啊?我还不知道、、、
DOM 模板解析注意事项
主要讲的是is特性,主要用tr、ol标签需要用到is特性。但是应该遇到的很少。
里面提到了字符串模板,也就是HTML被当成了字符串。但是.vue文件没有这样的问题。
data必须是函数
其实data虽然是函数,但是函数里面却return {},data最终的值还是一个对象。为什么?我猜是因为对象是引用类型,返回的是一个地址,所以需要包一层函数?
组件组合
组件传值要在父组件中的子组件的标签上 :变量名=变量名
,在子组件中通过props:{变量名:xxxxx},来接收数据,我平时用的这三个变量名是一致的,便于识别。
camelCase vs. kebab-case
camelCase是js的变量命名方式,kebab-case:是THML的命名方式。所有组件的放在HTML中用kebab-case,组件文件命名用帕斯卡,首字母大写
因为这原来是HTML的命名方式,现在vue对html进行再封装,所以放在HTML中组件要写成kebab-case,遵循原HTML样式,符合HTML规范。
动态prop
父子组件通信就是动态的prop,父组件数据变化子组件接受到的数据就会动态变化。
字面量语法 vs 动态语法
就说了一个只是点,为prop传值不能传常量,如果你一定要传常量,请加上v-bind,常量就变成了表达式。
<div a=1>
=><div :a=1>
单向数据流
规矩:值允许父往子传数据不允许子往父传数据。也就是说不能让子内部数据发生的变化,传给父组件。
单向数据流,这有点像函数纯的特点,我调用一个函数100次,返回给我100次相同的结果,而不应该是不同的结果。我觉得单项数据流,就是要保持这种纯的特性,如果还能逆向传递,那么vue组件内部就会不可控。
父子组件通信就是为了保证数据是可控的,可跟踪的。
Prop 验证
我们的项目规定的是props需要验证,写出需要的数据类型等