登录  /  注册
博主信息
博文 41
粉丝 0
评论 1
访问量 38171
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
VUE组件
kong
原创
507人浏览过

组件化开发

prop向子组件传递数据

  1. <template>
  2. <!-- 绑定变量传值 -->
  3. <Content :title="title" :msg="msg" :arr="arr" :ob="ob" />
  4. </template>
  5. <script>
  6. import OneCom from "./components/OneCom.vue";
  7. export default {
  8. data() {
  9. return {
  10. title: "标题",
  11. msg: "消息",
  12. arr : [
  13. '苹果',
  14. '香蕉',
  15. '梨子'
  16. ],
  17. ob: {
  18. name: "小明",
  19. age: "18岁"
  20. }
  21. };
  22. },
  23. components:{
  24. Content
  25. }
  26. };
  27. </script>
  28. <!--子组件-->
  29. <template>
  30. <div>
  31. <div>{{ title }}</div>
  32. <div>{{ msg }}</div>
  33. <div>{{ arr }}</div>
  34. <div>{{ ob }}</div>
  35. </div>
  36. </template>
  37. <script>
  38. export default {
  39. data() {
  40. return {
  41. };
  42. },
  43. // 1、props 参数,获取父文件的传值
  44. props: ["title", "msg", "arr", "ob"]
  45. };
  46. </script>

接收值并限制类型

有两种接收值的方法

第一种 数组字符串方法

props['接收值1','接收值2'...]

第二种 对象限制接收参数的类型

数组和对象要用方法返回

type: 类型 String ,Number, Object, Arr…
default: 不传值,给一个默认值
required: true,必须传的值,

子组件向父组件传值,事件传值

  1. //App.vue文件
  2. <template>
  3. <!-- 在父元素中使用子元素自定的事件名 -->
  4. <Content @click="EditChange()" />
  5. </template>
  6. <script>
  7. import Content from "./components/aj.vue"; //子元素
  8. export default{
  9. data(){
  10. return{
  11. value: '父组件值'//默认值
  12. }
  13. },
  14. methods: {
  15. //操作方法
  16. EditChange(){
  17. this.value = "改变的值"
  18. }
  19. },
  20. components: {
  21. //组件
  22. Content,
  23. }
  24. }
  25. </script>
  26. //aj.vue文件
  27. <template>
  28. <div>
  29. <button @click="edit()">点击改变父组件的值</button>
  30. </div>
  31. </template>
  32. <script>
  33. export default{
  34. data(){
  35. return{
  36. }
  37. },
  38. methods:{
  39. edit(value){
  40. //使用 $emit方法 $emit('自定义事件名',要传的值)
  41. this.$emit('EditChange',value)
  42. }
  43. }
  44. }
  45. </script>

父子组件访问方式

父组件访问子组件 $refs

  1. <!--父页面-->
  2. <hi :name="name" :age="age" :sex="sex" ref="hi"/>
  3. export default{
  4. mounted(){
  5. // console.log(this.$refs.hi)
  6. },
  7. }

子组件获取父组件的值 $parent 重叠性很强不适合使用

子组件获取根组件的值 $root

  1. <!--父页面-->
  2. <hi :name="name" :age="age" :sex="sex" ref="hi"/>
  3. <!--子页面-->
  4. export default{
  5. mounted(){
  6. // 子组件获取父组件的值 $parent 重叠性很强不适合使用
  7. // console.log(this.$parent)
  8. // 子组件获取根组件的值 $root
  9. // console.log(this.$root)
  10. }
  11. }

slot插槽

使用 slot 标签,做为占位:也叫插槽

  1. //OneCom.vue子文件
  2. <template>
  3. <div>
  4. <slot></slot>
  5. </div>
  6. </template>
  7. //App.vue 文件
  8. <template>
  9. <div>
  10. // 使用子组件,传button标签
  11. <one-com>
  12. <button>按钮</button>
  13. </one-com>
  14. </div>
  15. </template>
  16. <script>
  17. import OneCom from "./components/OneCom";
  18. export default {
  19. data() {
  20. return {};
  21. },
  22. components: {
  23. OneCom
  24. }
  25. };
  26. </script>

slot插槽命名

如果多个插槽,传2次按钮,会出现4个按钮,所以要用命名的方法

  1. //OneCom.vue 子文件
  2. <template>
  3. <div>
  4. <div class="flex">
  5. <slot name="top"></slot>
  6. <slot></slot>
  7. </div>
  8. </div>
  9. </template>
  10. //App.vue
  11. <template>
  12. <div>
  13. <one-com>
  14. // 使用 template 标签,v-slot参数,找到对应的插槽name名字
  15. <template v-slot:top>
  16. <button>按钮</button>
  17. </template>
  18. <button>按钮</button>
  19. </one-com>
  20. <one-com>
  21. <a>a链接</a>
  22. // 也可以#简写,是v-slot的语法糖
  23. <template #top>
  24. <a>a链接</a>
  25. </template>
  26. </one-com>
  27. <one-com>
  28. // 查找默认插槽
  29. <template v-slot:default>
  30. <a>a标签</a>
  31. </template>
  32. </one-com>
  33. </div>
  34. </template>
  35. <script>
  36. import OneCom from "./components/OneCom";
  37. export default {
  38. components: {
  39. OneCom,
  40. }
  41. };
  42. </script>

父级使用插槽,使用子组件数据

  1. //子元素
  2. <template>
  3. <div>
  4. <div class="flex">
  5. <slot :list="list"></slot>
  6. </div>
  7. </div>
  8. </template>
  9. <script>
  10. export default {
  11. data(){
  12. return{
  13. list:[1,2,3,4,5]
  14. }
  15. }
  16. }
  17. </script>
  18. //App.vue
  19. <template>
  20. <div>
  21. <OneCom>
  22. <!-- 作用域插槽此处的data命名可以任意 default代表着子组件的slot默认name值-->
  23. <template v-slot:default="data">
  24. <ul>
  25. <li v-for="item in data.list" :key="item" @click="lis">
  26. {{ item }}
  27. </li>
  28. </ul>
  29. </template>
  30. </OneCom>
  31. </div>
  32. </template>
  33. <script>
  34. import OneCom from './OneCom.vue'
  35. export default {
  36. data(){
  37. return{}
  38. },
  39. components:{
  40. OneCom
  41. }
  42. }
  43. </script>

使用provide 与inject跨通信传值(父组件改变子孙组件)

  1. //OneCom.vue 子元素
  2. <template>
  3. <div>
  4. <h1>
  5. {{ newMessage }}
  6. </h1>
  7. </div>
  8. </template>
  9. <script>
  10. export default {
  11. inject: ['message'], //接收父组件传递的值
  12. data(){
  13. return{}
  14. },
  15. computed:{
  16. newMessage(){
  17. return this.message()
  18. }
  19. },
  20. }
  21. </script>
  22. //App.vue
  23. <template>
  24. <div>
  25. <HelloWorld></HelloWorld>
  26. <button @click="msgs">点击</button>
  27. </div>
  28. </template>
  29. <script>
  30. import OneCom from './OneCom.vue'
  31. export default {
  32. data(){
  33. return{
  34. message:"helloWorld"
  35. }
  36. },
  37. provide(){
  38. return{
  39. message:()=> this.message //传递到子孙组件动态值
  40. }
  41. },
  42. methods:{
  43. msgs(){ //点击改变的事件
  44. this.message = '消息改变了'
  45. }
  46. }
  47. }
  48. </script>
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学