vue 组件开发

目录

组件认知

 组件简单使用

项目结构:

Search.vue

HelloWorld.vue 

App.vue 根组件

效果展示 

data函数return的理解 

通过 Prop 向子组件传递数据 子取父数据

理解:

简单使用:

父组件 App.vue

子组件 Search.vue

结果展示: 

单向数据流

监听子组件事件 父取子数据

理解

简单使用

代码

结果:

 父子组件的访问方式

父组件访问子组件 $refs 常用

理解

代码

展示效果

 子组件访问父组件 $parent $root

理解

 代码

结果

插槽

通过插槽分发内容

理解

简单使用 代码

具名插槽  渲染作用域 备用内容

 具名插槽 渲染作用域 代码  

备用内容 渲染作用域 代码 

 作用域插槽

理解

代码

组件之间跨级通信 Provide / Inject

理解

代码 

非响应式 

 响应式


组件认知

一个应用会以一棵嵌套的组件树的形式来组织

例如,你可能会有页头、侧边栏、内容区等组件,每个组件又包含了其它的像导航链接、博文之类的组件。

层层划分 页由多组 

组件是可复用的实例,所以它们与根实例接收相同的选项,例如 datacomputedwatchmethods 以及生命周期钩子等

vue 组件开发_第1张图片

 组件简单使用

项目结构:

vue 组件开发_第2张图片

我们使用的组件是单文件组件(有一套完整的.vue内容 单独模块功能的封装)而不是字符串模板

Search.vue



HelloWorld.vue 






App.vue 根组件




效果展示 

 vue 组件开发_第3张图片

data函数return的理解 





vue 组件开发_第4张图片

对比:





vue 组件开发_第5张图片

通过 Prop 向子组件传递数据 子取父数据

理解:

vue 组件开发_第6张图片

简单使用:

父组件 App.vue




子组件 Search.vue

1.以字符串数组形式列出的 props





2. proos以对象的形式





结果展示: 

vue 组件开发_第7张图片

 警告:

 vue 组件开发_第8张图片

单向数据流

所有的 prop 都使得其父子 prop 之间形成了一个单向下行绑定:父级 prop 的更新会向下流动到子组件中,但是反过来则不行。这样会防止从子组件意外变更父级组件的状态,从而导致你的应用的数据流向难以理解。

另外,每次父级组件发生变更时,子组件中所有的 prop 都将会刷新为最新的值。这意味着你应该在一个子组件内部改变 prop。如果你这样做了,Vue 会在浏览器的控制台中发出警告

1.这个 prop 用来传递一个初始值;这个子组件接下来希望将其作为一个本地的 prop 数据来使用

 2.这个 prop 以一种原始的值传入且需要进行转换。

监听子组件事件 父取子数据

理解

vue 组件开发_第9张图片

简单使用

代码

Search.vue





App.vue




结果:

vue 组件开发_第10张图片

 父子组件的访问方式

父组件访问子组件 $refs 常用

理解

vue 组件开发_第11张图片

代码

vue.app




search.vue





展示效果

vue 组件开发_第12张图片

vue 组件开发_第13张图片

 vue 组件开发_第14张图片

 子组件访问父组件 $parent $root

提示不太推荐使用 组件复用性高 这样使用会降低子组件的使用场景

理解

vue 组件开发_第15张图片

 代码

$parent $root 用法相同 就展示一个使用方法

$parent

Search.vue





App.vue




结果

vue 组件开发_第16张图片

插槽

通过插槽分发内容

理解

vue 组件开发_第17张图片

简单使用 代码

App.vue




Search.vue





 结果展示

vue 组件开发_第18张图片

具名插槽  渲染作用域 备用内容

具名插槽: 

 元素有一个特殊的 attribute:name。通过它可以为不同的插槽分配独立的 ID,也就能够以此来决定内容应该渲染到什么地方

一个不带 name 的  出口会带有隐含的名字“default”

渲染作用域:

该插槽可以访问与模板其余部分相同的实例 property (即相同的“作用域”)。

官网 理解:父组件中用到的插槽中添加的内容 属于父组件 子组件使用不了

父级模板里的所有内容都是在父级作用域中编译的;子模板里的所有内容都是在子作用域中编译的。

备用内容:

有时为一个插槽指定备用 (也就是默认的) 内容是很有用的,它只会在没有提供内容的时候被渲染。

vue 组件开发_第19张图片

 具名插槽 渲染作用域 代码  

Search.vue





App.vue




结果

vue 组件开发_第20张图片

备用内容 渲染作用域 代码 

Search.vue





App.vue 





结果

vue 组件开发_第21张图片

 作用域插槽

理解

父组件替换插槽的标签 但是数据由子组件来提供

vue 组件开发_第22张图片

代码

Search.vue





App.vue




结果

vue 组件开发_第23张图片

组件之间跨级通信 Provide / Inject

无论组件层次结构有多深,父组件都可以作为其所有子组件的依赖提供者。这个特性有两个部分:父组件有一个 provide 选项来提供数据,子组件有一个 inject 选项来开始使用这些数据。

理解

vue 组件开发_第24张图片

 

 

vue 组件开发_第25张图片

代码 

App.vue




Search.vue





非响应式 

默认情况下,provide/inject 绑定并不是响应式的

如果我们更改了 祖先组件 的数据,这个变化并不会反映在 inject 的 子组件 property 中。

NavigationBar.vue





Input.vue




展示

点按钮前

vue 组件开发_第26张图片

 点按钮后

vue 组件开发_第27张图片

 响应式

NavigationBar.vue





Input.vue




结果

点按钮前

vue 组件开发_第28张图片

 

点按钮后

vue 组件开发_第29张图片

 

 

你可能感兴趣的:(vue,vue.js,前端,javascript)