likes
comments
collection
share

Vue2学习之组件与props

作者站长头像
站长
· 阅读数 41

组件

什么是组件化开发

组件化开发指的是:根据封装的思想,把页面上可重用的 UI 结构封装为组件,从而方便项目的开发和维护。

vue中的组件开发

vue 是一个支持组件化开发的前端框架。

vue 中规定:组件的后缀名是 .vue。之前接触到的 App.vue 文件本质上就是一个 vue 的组件。

vue组件的三个组成部分

Vue2学习之组件与props

template

Vue2学习之组件与props 这里有一个需要注意的点是,在整个template标签当中,只能包含一个根元素,如果有多个根元素,则报错。所以建议的写法是创建一个组件,那么就应该在template标签内先写上一个div标签。

script

Vue2学习之组件与props

.vue组件中的data必须是函数

Vue2学习之组件与props 不能用上面的形式写,必须写成函数: Vue2学习之组件与props 如果有方法,则和之前一样,与data平级: Vue2学习之组件与props 还有其他的什么侦听器啊计算属性啊都可以像methods一样放。 Vue2学习之组件与props

style

Vue2学习之组件与props

让style中支持less语法

Vue2学习之组件与props

组件之间的父子关系

Vue2学习之组件与props 三个组件之间原本是没有任何关系的,但在使用的时候我们可以人为的给它们提供关系。比如我们现在要在App组件中使用Left组件和Right组件,那么App组件就应该是这俩组件的父组件。

使用组件的三个步骤

那么如何让它们产生联系? 用下面的方式可以做到。 Vue2学习之组件与props 上面的注册组件有一个点需要注意: Vue2学习之组件与props 就是完整的写法应该像上面这样以键值对形式写,但是因为是一样的所以我们简写成了Left,这个要注意。

同时也要注意:@指的是./src,这个在webpack里面单独讲过。

通过components注册是私有组件

Vue2学习之组件与props

全局注册组件

当某个组件频繁被用到,那么我们就可以注册全局组件。 Vue2学习之组件与props

组件的props

为什么需要props?看下面一个例子: Vue2学习之组件与props 其中Count是一个可复用的组件,在这个Demo中被作为Left.vue和Right.vue的子组件使用,现在我们在这个组件中实现了一个点击按钮自增+1的效果。 Vue2学习之组件与props 但是我们知道,因为Count组件中的count默认初始值为0,所以对应到各自的父组件中则也是0。 Vue2学习之组件与props 那我们现在有一个需求是,想让父组件自主的去操作count属性,怎么办呢?比如我想让Left组件的count初始值为0,让Right组件的count初始值为9,怎么办呢? 这个时候就需要组件之间传值来完成,Vue中用props属性来完成这种操作。

Vue2学习之组件与props 用props来实现我们刚刚的操作: 用props中的自定义属性init来接收父组件的传值,然后将传过来的值渲染到template中即可。 在父组件中若想传值则可直接在组件标签内部使用kv键值对形式赋值就行。 Vue2学习之组件与props 上面的代码中:init="6"实质上是传递的字符串,如果想传递整形值,则应该用v-bind绑定,因为v-bind绑定属性时使用的js的语法格式,此时如果想传递字符串则应该再加个''单引号。 所以上面应该写成: Vue2学习之组件与props

prop是只读的

Vue2学习之组件与props 可以这样写是因为this(也就是当前Vue组件的实例对象)中是有init,也就是我们的自定义属性,所以可以用this.的方式将其取出来赋值给count,因为count是可读可写的,而init是只读的。

props的default默认值

Vue2学习之组件与props

props的type值类型

Vue2学习之组件与props

props的required必填项

Vue2学习之组件与props

组件之间的样式冲突问题

Vue2学习之组件与props

如何解决组件样式冲突的问题

Vue2学习之组件与props

style节点的scope属性

Vue2学习之组件与props

/deep/样式穿透

Vue2学习之组件与props 这个东西在用到第三方组件库的时候会频繁用到: Vue2学习之组件与props