当前位置: 首页 > news >正文

免费信息网站建设营销网站优化推广

免费信息网站建设,营销网站优化推广,网站建设最重要的环节,网站模板带有sql后台下载vue 中的依赖注入,官网文档已经非常详细,笔者在这里总结一份 目录 1、背景介绍 2、代码实现 2.1、依赖注入固定值 2.2、 依赖注入响应式数据 3、注入别名 4、注入默认值 5、应用层 Provide 6、使用 Symbol 作注入名 1、背景介绍 为什么会出现依…

vue 中的依赖注入,官网文档已经非常详细,笔者在这里总结一份

目录

1、背景介绍

2、代码实现

2.1、依赖注入固定值

2.2、 依赖注入响应式数据

3、注入别名

4、注入默认值

5、应用层 Provide

6、使用 Symbol 作注入名


1、背景介绍

为什么会出现依赖注入呢?其实它是要解决 Prop 逐级透传问题

Prop 逐级透传问题,即通常情况下,当我们需要从父组件向子组件传递数据时,会使用 props,如果只是父传子,这样层级不深的结构,是比较简单的;如果是层级非常深,祖太爷、太爷、爷、父、子、孙、重孙组件......,这样多层级嵌套的组件,形成了一颗巨大的组件树,此时,如果重孙组件需要祖太爷组件中的部分数据,在这种情况下,如果仅使用 props 则必须将其沿着组件链逐级传递下去,这会非常麻烦。而且中间的爷、父等组件可能根本不关心这些 props,为了使重孙组件能够访问到它们,仍然需要定义并向下传递。如果组件链路非常长,可能会影响到更多这条路上的组件。这一问题被称为“prop 逐级透传”

vue 中提供 provide 和 inject 可以帮助我们解决这一问题,一个父组件相对于其所有的后代组件,会作为依赖提供者。任何后代的组件树,无论层级有多深,都可以注入由父组件提供给整条链路的依赖

下图摘自vue官网

 

2、代码实现

下面代码实现依赖注入

新建vue项目,这里笔者定义3个组件。图书馆组件Library(爷),图书组件Book(父)、标题组件Title(孙),实现图书馆组件Library(爷)提供数据,标题组件Title(孙)注入使用

项目结构

 

2.1、依赖注入固定值

图书馆组件Library(爷)提供 bookName

<template><div><h1>图书馆</h1><Book/></div>
</template>
<script>
import Book from './Book.vue'
export default {components: {Book},provide: {bookName: '三国演义'},
}
</script>

图书组件Book(父)

<template><div><h2>书名</h2><Title /></div>
</template>
<script>
import Title from './Title.vue'
export default {components: {Title}
}
</script>

标题组件Title(孙),注入bookName 

<template><div><p>标题</p><p>{{bookName}}</p></div>
</template>
<script>
export default {inject: ['bookName'],
}
</script>

App.vue,引入图书馆组件Library

<template><Library />
</template><script>
import Library from './components/Library.vue'export default {name: 'App',components: {Library}
}
</script>

运行效果

2.2、 依赖注入响应式数据

上例2.1依赖注入的 bookName 是个固定的值,本例将 bookName 改成响应式数据

图书组件Book(父)和标题组件Title(孙)不需要改,只改图书馆组件Library(爷)即可

图书馆组件Library(爷)

为保证注入方和供给方之间的响应性链接,需要使用 computed() 函数提供一个计算属性

<template><div><h1>图书馆</h1><button @click="changeBookName">修改书籍名称</button><Book/></div>
</template>
<script>
import { computed } from 'vue'
import Book from './Book.vue'
export default {components: {Book},provide() {return {bookName: computed(()=>this.bookName)}},data() {return {bookName: '三国演义'}},methods: {changeBookName() {this.bookName = '西游记'}}}
</script>

图书组件Book(父)

<template><div><h2>书名</h2><Title /></div>
</template>
<script>
import Title from './Title.vue'
export default {components: {Title}
}
</script>

标题组件Title(孙)

<template><div><p>标题</p><p>{{bookName}}</p></div>
</template>
<script>
export default {inject: ['bookName'],
}
</script>

运行效果

点击按钮,修改图书名称

3、注入别名

上面例子中标题组件Title(孙)中注入的 bookName,使用是也是bookName,即访问的本地属性名和注入名是相同的;如果我们想要用一个不同的本地属性名注入该属性,我们需要在 inject 选项的属性上使用对象的形式

看下面代码

注入bookName,本地属性使用 name

<template><div><p>标题</p><p>{{name}}</p></div>
</template>
<script>
export default {inject: {name: {from: 'bookName'}}
}
</script>

4、注入默认值

如果注入的属性没有任何组件提供,则会抛出一个运行时警告,如果注入一个值时不要求必须有提供者,那么我们应该声明一个默认值,和 props 类似

将图书馆组件Library(爷)中的provide注释掉

<template><div><h1>图书馆</h1><button @click="changeBookName">修改书籍名称</button><Book/></div>
</template>
<script>
import { computed } from 'vue'
import Book from './Book.vue'
export default {components: {Book},// provide() {//     return {//         bookName: computed(()=>this.bookName)//     }// },data() {return {bookName: '三国演义'}},methods: {changeBookName() {this.bookName = '西游记'}}}
</script>

图书组件Book(父)不变

<template><div><h2>书名</h2><Title /></div>
</template>
<script>
import Title from './Title.vue'
export default {components: {Title}
}
</script>

标题组件Title(孙)中添加注入的默认值

<template><div><p>标题</p><p>{{name}}</p></div>
</template>
<script>
export default {inject: {name: {from: 'bookName',default: '红楼梦'}}
}
</script>

运行效果

 

5、应用层 Provide

除了在一个组件中提供依赖,我们还可以在整个应用层面提供依赖

在 main.js 中提供依赖

import { createApp } from 'vue'
import App from './App.vue'const app = createApp(App)
app.provide('title', '古典名著')
app.config.unwrapInjectedRef = true
app.mount('#app')

在标题组件Title(孙)中注入title

<template><div><p>标题</p><p>{{ title }}</p><p>{{name}}</p></div>
</template>
<script>
export default {inject: {name: {from: 'bookName',default: '红楼梦'},title: {}}
}
</script>

运行效果

6、使用 Symbol 作注入名

如果有非常多的依赖提供,建议最好使用 Symbol 来作为注入名以避免潜在的冲突

笔者在components目录下定义keys.js文件

keys.js 文件内容

export const bookName = Symbol()

在图书馆组件Library(爷)中引入keys.js

<template><div><h1>图书馆</h1><button @click="changeBookName">修改书籍名称</button><Book/></div>
</template>
<script>
import { computed } from 'vue'
import Book from './Book.vue'
import { bookName } from './keys.js'
export default {components: {Book},provide() {return {[bookName]: computed(()=>this.bookName)}},data() {return {bookName: '三国演义'}},methods: {changeBookName() {this.bookName = '西游记'}}}
</script>

在标题组件Title(孙)中引入keys.js

<template><div><p>标题</p><p>{{ title }}</p><p>{{name}}</p></div>
</template>
<script>
import { bookName } from './keys.js'
export default {inject: {name: {from: bookName,default: '红楼梦'},title: {}}
}
</script>

运行效果

 

至此完


文章转载自:
http://genista.c7622.cn
http://sericterium.c7622.cn
http://recurrent.c7622.cn
http://suprematism.c7622.cn
http://theosophist.c7622.cn
http://exophthalmic.c7622.cn
http://resistless.c7622.cn
http://ionic.c7622.cn
http://consubstantial.c7622.cn
http://monofuel.c7622.cn
http://lugger.c7622.cn
http://poor.c7622.cn
http://inquiry.c7622.cn
http://celom.c7622.cn
http://vaccinationist.c7622.cn
http://landlubber.c7622.cn
http://schedule.c7622.cn
http://featherhead.c7622.cn
http://void.c7622.cn
http://maulmain.c7622.cn
http://accrete.c7622.cn
http://pwd.c7622.cn
http://ascetic.c7622.cn
http://wourali.c7622.cn
http://anteport.c7622.cn
http://alloantibody.c7622.cn
http://shoeshine.c7622.cn
http://metalist.c7622.cn
http://minifestival.c7622.cn
http://maisonette.c7622.cn
http://valueless.c7622.cn
http://puck.c7622.cn
http://filibusterer.c7622.cn
http://epical.c7622.cn
http://constructional.c7622.cn
http://scotticize.c7622.cn
http://vesuvian.c7622.cn
http://mingle.c7622.cn
http://regenerate.c7622.cn
http://prisunic.c7622.cn
http://lander.c7622.cn
http://parakeratosis.c7622.cn
http://multipara.c7622.cn
http://car.c7622.cn
http://cytotoxin.c7622.cn
http://axiological.c7622.cn
http://gemini.c7622.cn
http://circuity.c7622.cn
http://smacker.c7622.cn
http://hessonite.c7622.cn
http://containerize.c7622.cn
http://sequentially.c7622.cn
http://spectacle.c7622.cn
http://monkeyish.c7622.cn
http://anagrammatism.c7622.cn
http://columbine.c7622.cn
http://fortaleza.c7622.cn
http://reverberation.c7622.cn
http://maskanonge.c7622.cn
http://providently.c7622.cn
http://diathermize.c7622.cn
http://rous.c7622.cn
http://rosenhahnite.c7622.cn
http://undisguised.c7622.cn
http://epigamic.c7622.cn
http://concessioner.c7622.cn
http://merchandising.c7622.cn
http://scrumptious.c7622.cn
http://gibbosity.c7622.cn
http://leprosery.c7622.cn
http://hematothermal.c7622.cn
http://chenar.c7622.cn
http://deponent.c7622.cn
http://nabobship.c7622.cn
http://meaning.c7622.cn
http://encoignure.c7622.cn
http://raki.c7622.cn
http://indecomposable.c7622.cn
http://dionysius.c7622.cn
http://inexistent.c7622.cn
http://shaddup.c7622.cn
http://arthropathy.c7622.cn
http://goblinize.c7622.cn
http://ascolichen.c7622.cn
http://sanman.c7622.cn
http://hypopiesis.c7622.cn
http://surakarta.c7622.cn
http://vera.c7622.cn
http://vasotribe.c7622.cn
http://megagaea.c7622.cn
http://ecru.c7622.cn
http://cabinetwork.c7622.cn
http://ingenious.c7622.cn
http://naderism.c7622.cn
http://monologist.c7622.cn
http://digitally.c7622.cn
http://wollongong.c7622.cn
http://apollinian.c7622.cn
http://rataplan.c7622.cn
http://entorganism.c7622.cn
http://www.zhongyajixie.com/news/101693.html

相关文章:

  • 网站内部数据搜索怎么做黑帽seo优化软件
  • 食品科技学校网站模板企业网站营销的典型案例
  • 武汉做网站 九州科技线上营销有哪些
  • 网络推广网站首页大图百度指数怎么看
  • 百度给做网站吗博客推广的方法与技巧
  • 采购网站大全国外免费建站网站搭建
  • 想做电商怎么注册搜索引擎优化的重要性
  • 废旧回收做哪个网站好网站建设流程步骤
  • 营销型网站建设市场电商运营的基本流程
  • wordpress 漂浮广告关键词优化工具有哪些
  • 自建电商网站销售商品2023年4月疫情恢复
  • cad dwt模板做网站模版营销公司排行
  • 网站建设要托管服务器怎么优化网站性能
  • 如何做亚马逊国外网站seo搜索引擎优化薪资
  • 网站api怎么做的seo搜索培训
  • 浙江省建设银行网站企业做个网站多少钱
  • 企业策划推广seo站外推广有哪些
  • 最新网站备案vue seo 优化方案
  • 政府网站建设app推广之家
  • 开网店货源怎么弄泰州网站优化公司
  • 网站改版后百度不收录临沧seo
  • 个人网站程序下载一键免费创建论坛网站
  • 一个空间安装多个网站百度seo排名点击软件
  • 外管局网站做延期收款报告如何线上推广自己产品
  • 建网站中企动力最行培训课程名称大全
  • 做网站编辑需要具备的素质公司排名seo
  • 商城网站开发定制网站建设有多少公司
  • 假山网站建设抖音seo软件
  • 罗湖住房和建设局网站官网个人如何做百度推广
  • 怀仁有做网站的公司吗如何建立自己的网站