首页 > 其他分享 >Vue3 响应式全局对象

Vue3 响应式全局对象

时间:2023-07-14 16:55:56浏览次数:36  
标签:userName false dataItem userExten isRegister globalData 响应 Vue3 全局

需求在 main.js 中 创建一个 响应式全局对象 。改变这个全局对象时 ,子组件应同步响应。

效果:这几个标签框 绑定的全局对象json

main.js

定义 响应式全局对象

//全局对象
const globalData=reactive({
    extTelMonitorData: [
    {
        title: '用户组一',
            list: [
                {
                    groupID: "0",
                    groupName: "All Users",
                    userDomain: "equiinet.cn",
                    userExten: "1000",
                    userID: "1",
                    userName: "刘亦菲",
                    isRegister: false,
                    callStatus:""
                },
                {
                    groupID: "0",
                    groupName: "All Users",
                    userDomain: "equiinet.cn",
                    userExten: "1001",
                    userID: "2",
                    userName: "娜然",
                    isRegister: false,
                    callStatus:""
                },
                {
                    groupID: "0",
                    groupName: "All Users",
                    userDomain: "equiinet.cn",
                    userExten: "1002",
                    userID: "3",
                    userName: "佟丽娅",
                    isRegister: false,
                    callStatus:""
                },
                {
                    groupID: "0",
                    groupName: "All Users",
                    userDomain: "equiinet.cn",
                    userExten: "1003",
                    userID: "3",
                    userName: "迪丽热巴",
                    isRegister: false,
                    callStatus:""
                }
                ]
            },
            {
                title: '用户组二',
                list: [
                {
                    userName: '张三',
                    number: 1003,
                    isRegister: false 
                },
                {
                    userName: '王一',
                    number: 1005,
                    isRegister: false 
                } 
            ]
            },
            {
                title: '用户组三',
                list: [
                {
                    userName: '刘中',
                    number: 1006,
                    isRegister: false 
                },
                {
                    userName: '李毅',
                    number: 1007,
                    isRegister: false 
                } 
                ]
            },
            {
                title: '全部分机',
                list: [
                {
                    userName: '李安',
                    number: 1008,
                    isRegister: false 
                },
                {
                    userName: '李毅',
                    number: 1009,
                    isRegister: false 
                    }
                ]
            }
    ] 
    ,
    var2: 'value2'
})
app.provide('globalData', globalData);
 

main.js 中的函数 改变 全局对象 globalData.extTelMonitorData

function websocket_resMsg_extTelStatus(msg){
   //globalData.extTelMonitorData=JSON.parse(msgExtTelStatus);
    //将字符串转为json对象
    globalData.extTelMonitorData=eval('('+msgExtTelStatus+')');
    console.log('收到  '+ msgExtTelStatus);
}

 

 子组件 ExtTelStatusComponent

<template>
<div class="IndConB flex" id="divExtTelStatus1"> 
    <el-row :gutter="74"  v-for="(dataItem, index) in globalData.extTelMonitorData[0].list" :key="index">
        <el-col :span="8">  
            <div style="width:190px;">
            <a href="javascript:;" class="IndCona"  >
                <div class="IndConaH flexC Huans" style="width:95%;"><img src="../assets/images/pic/phone01.png">
                    <p  >&nbsp;&nbsp;&nbsp;{{dataItem.userExten}}</p></div>
                <div class="IndConaP" style="width:95%;">
                    <div class="IndConaPz Huans">名称: {{dataItem.userName}}</div>
                    <div class="IndConaPz Huans">状态: {{dataItem.callStatus}}</div>
                </div>
                <div class="IndConaF flexC fl-cen" style="width:95%;"><img src="../assets/images/pic/tanhao.png">
                    <p>{{dataItem.isRegister}}</p></div>
                
                <div class="IndConaD Huans">
                    <p>名称 : 调度电话</p>
                    <p>号码 : {{dataItem.userExten}}</p>
                    <p>状态 : {{dataItem.isRegister}}</p>
                    <p>分区 : {{dataItem.groupID}}</p>
                    <p>终端 : {{dataItem.userDomain}}</p>
                </div>
            </a>
            </div>
        </el-col>
        &nbsp;
    </el-row> 
    <a href="javascript:;" class="IndConFa flexC fl-cen" v-on:click="foot_calltel()"><p>测试一下</p></a>
</div>
</template>

<script>
// 在子组件中注入全局对象
import { inject, watch } from 'vue'

export default {
  // 组件名称
    name: 'ExtTelStatusComponent',
    data() {
        return {
       
        extensionMonitorDataA: [
        {
          title: '用户组一',
          list: [
          {
            groupID: "0",
            groupName: "All Users",
            userDomain: "equiinet.cn",
            userExten: "1000",
            userID: "1",
            userName: "11111",
            isRegister: false,
            callStatus:""
          },
          {
            groupID: "0",
            groupName: "All Users",
            userDomain: "equiinet.cn",
            userExten: "1001",
            userID: "2",
            userName: "22222",
            isRegister: false,
            callStatus:""
          }
        ]
        } 
       ] 
        };
    },
    setup() {
        // 注入全局对象
    const globalData = inject('globalData');
 
        watch(() => globalData.extTelMonitorData, (newValue) => {
            // 更新 
            globalData.extTelMonitorData=newValue;
            console.log("ExtTelStatusComponent watch "+globalData.extTelMonitorData[0].list);    
        })

return {
            globalData,
            handleClick
        };

        function handleClick() {
         
        }
  },

  mounted() {
      
   },
  methods: {
        foot_calltel(){
            console.log("foot_calltel "+ "");   
            this.globalData.extTelMonitorData=this.extensionMonitorDataA;
        }
 
    }
    
}
</script>

 

标签:userName,false,dataItem,userExten,isRegister,globalData,响应,Vue3,全局
From: https://www.cnblogs.com/hailexuexi/p/17554250.html

相关文章

  • java匿名类怎么把数据传递给全局变量
    ThreadLocal:参考:https://blog.csdn.net/u010746364/article/details/50607236/ https://blog.csdn.net/yuanchangliang/article/details/107747545>>Swing组件之间怎么传值?......
  • fastapi框架docs文档Responses去掉默认的异常响应422Validation Error
    fastapi框架原生docs的Responses中会有个默认的422ValidationError响应,但大多数实际开发应该不需要,如何去除呢?我用的方法是用猴子补丁重写fastapi.openapi.util里的get_openapi_path方法,去掉加入默认422的那段代码即可,下面这些http422=str(HTTP_422_UNPROCESSABLE_ENTITY)......
  • vite+vue3+minio
    之前h5用的minio上传文件,现在web端也需要用这个,但h5是用的vue2,web用的vue3,就出现了一些问题 架子是用的vite搭建的,但vite不支持require导入。用import的话minio不支持import引入,也会报错一.用vue2搭个项目,将minio通过require方式导入,再进行导出,上传npm,然后再npminstall......
  • 响应
          主要是它(类型转换器)在做事情 ......
  • Vue3+Vue-Router+TypeScript+Vite+Element-Plus+Axios+Pinia快速搭建开发框架
    1、环境准备(1)首先你得需要安装node和npm2、环境初始化(1)先随意找个文件夹,初始化vite#安装pnpmnpmi-gpnpm#初始化vitepnpmcreatevite#安装依赖pnpminstall(2)最后我们执行pnpmrundev3、安装插件(1)Eslint校验代码工具安装eslint#安装eslint......
  • 使用vue3、egg和SQLite开发通用管理后台系统
    使用vue3、egg和SQLite开发通用管理后台系统plaform是一个基于RBAC模型开发的后台管理系统,没有多余的功能。本项目是一个以学习为目的的后台项目,旨在让前端也能充分了解RBAC模型是如何设计的,不建议用于线上,因为未经过充分的测试。项目地址:https://github.com/essay-org/platform......
  • Vue3
    一、创建Vue3.0工程1.使用vue-cli创建官方文档:https://cli.vuejs.org/zh/guide/creating-a-project.html#vue-create##查看@vue/cli版本,确保@vue/cli版本在4.5.0以上vue--version##安装或者升级你的@vue/clinpminstall-g@vue/cli##创建vuecreatevue_test##......
  • nginx部署 vue3 同时 配置接口代理(详细)
    Vue项目配置.env文件在项目根目录下创建文件夹(.env.production)##.env.production生产环境配置VUE_APP_SYS_URL=sysapi##nginx需要用的的代理表示VUE_APP_MODE=product##模式baseUrl使用VUE_APP_SYS_URL变量代替Nginx下载部署和配置api代理Nginx下载......
  • vue3核心概念-Mutation-辅助函数
    你可以在组件中使用 this.$store.commit('xxx') 提交mutation,或者使用 mapMutations 辅助函数将组件中的methods映射为 store.commit 调用(需要在根节点注入 store)辅助函数只能在选项式API中使用<template><h3>Nums</h3><p>{{getCount}}</p><inputtype="......
  • 全局API的转移
    2.x全局API(Vue)3.x实例API(app)Vue.config.xxxxapp.config.xxxxVue.config.productionTip移除Vue.componentapp.componentVue.directiveapp.directiveVue.mixinapp.mixinVue.useapp.useVue.prototypeapp.config.globalProperties......