小嗨嗨
小嗨嗨
  • 发布:2024-01-15 14:14
  • 更新:2024-05-16 14:41
  • 阅读:321

【报Bug】uni-app render.js 通信,在render.js 视图层里接收逻辑层数据有时会接收不到

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: Windows 11 专业版

HBuilderX类型: 正式

HBuilderX版本号: 3.99

手机系统: Android

手机系统版本号: Android 14

手机厂商: 华为

手机机型: 华为P40pro

页面类型: vue

vue版本: vue2

打包方式: 云端

项目创建方式: HBuilderX

示例代码:

    <view class="mapView" id="myMapView" :mapData="mapData" :change:mapData="myMapViews.getMapData"></view>  
</template>  

<script>  
    import {  
        mapGetters,  
        mapState  
    } from "vuex"  
    import {  
        getPrivCity,  
    } from "@/util/validate.js"  
    import {getAction} from "@/api/mamage.js"  
    import {  
        mapDataMiXin  
    } from '@/mixins/mapDataMiXin.js'  
    export default {  
        name: 'Map',  
        mixins: [mapDataMiXin],  
        data() {  
            return {  
                mapData: null, // 地图数据  
                isMapReady:false, // arcgis 准备好了  
            }  
        },  
        computed: {  
            ...mapState({  
                mainUnit: (state) => state.mainUnit, // 选中的单位数据  
                unitList:(state)=>state.unitList, // 所有单位数据  
                layerConfig:(state) => state.layerConfig, // 选中的资源数据  
                adminResource:(state) => state.adminResource, // 选中的行政资源  
                landTypeArr:(state) => state.landTypeArr, // 林地类型数据  
                monitoringDictLayer:(state) => state.monitoringDictLayer, // 活动图层  
                fireLevelData:(state) => state.fireLevelData, // 火险等级  

            }),  
        },  
        watch:{  
            // 选中单位数据监听  
            mainUnit:{  
                handler(newVal,oldVal){  
                    if(newVal){  
                        // 获取priv  
                        this.getPriv()  
                        // 所有设施设备  
                        this.selectAllData()  
                    }  
                },deep:true  
            },  
            // 所有城市数据  
            unitList:{  
                handler(newVal,oldVal){  
                    this.setData(newVal,'unitList')  
                },deep:true  
            },  
            // 选中的资源数据  
            layerConfig:{  
                handler(newVal,oldVal){  
                    this.setData(newVal,'layerConfig')  
                },deep:true  
            },  
            // 选中的行政资源  
            adminResource:{  
                handler(newVal,oldVal){  
                    this.setData(newVal,'adminResource')  
                },deep:true  
            },  
            // 林地类型数据  
            landTypeArr:{  
                handler(newVal,oldVal){  
                    this.setData(newVal,'landTypeArr')  
                },deep:true  
            },  
            // 活的图层  
            monitoringDictLayer:{  
                handler(newVal,oldVal){  
                    this.setData(newVal,'monitoringDictLayer')  
                },deep:true  
            },  
            // 火险等级  
            fireLevelData:{  
                handler(newVal,oldVal){  
                    this.setData(newVal,'fireLevelData')  
                },deep:true  
            },  

        },  
        methods: {  
            ...mapGetters(['getCityBasic', 'getMainUnit']),  

            // 获取priv  
            getPriv(){  
                let that = this  
                let mainUnit = that.getMainUnit()  
                if(mainUnit){  
                    let priv = getPrivCity(mainUnit.code,that.getCityBasic())  
                    console.log("prive----",priv)  
                    that.setData({priv:priv},'privData')  
                }  
            },  
            // 设置数据  
            setData(data,type){  
                let that = this  
                that.$nextTick(()=>{  
                    let obj = {type:type,data:data}  
                    setTimeout(()=>{  
                        that.mapData = {...obj,timeTemp:new Date()}  
                    },0.5*1000)  

                })  

            }  
        }  
    }  
</script>  
<script module="myMapViews" lang="renderjs">  
    import {  
        arcgisMiXin  
    } from '@/mixins/arcgis.js'  
    export default {  
        name: 'Map',  
        mixins: [arcgisMiXin],  
        data() {  
            return {  
                privs: null, // 边界线privs  
                deviceData: null, // 所有设施设备数据  
                layerConfigData: null, // 选中的资源数据  
                allCityData:[], // 所有城市数据  
            }  
        },  
        mounted() {  

        },  
        methods: {  
            // 获取从逻辑层传递过来的数据  
            getMapData(obj){  
                let that = this  
                console.log("传递过来数据",obj)  
                if(obj && obj.type){  
                    switch(obj.type){  
                        // 边界线要用的  
                        case 'privData':  
                            that.privs = obj.data.priv  
                            console.log("that.privsthat.privs边界线要用的",that.privs)  
                            // 添加城市边界线  
                            that.addCountyBorder()  
                            break  
                        case 'unitList':  
                            // 所有城市数据  
                            that.allCityData = obj.data  
                            break  
                        case 'layerConfig':  
                            // 选中的资源  
                            that.layerConfigData = obj.data  
                            // 控制资源图层显示隐藏  
                            that.clusterLayerShowHide()  
                            break  
                        case 'deviceData':  
                            // 所有设施设备数据  
                            that.deviceData = obj.data  
                            // 初始化资源图层  
                            that.initCustomLayer()  
                            break  
                        case 'adminResource':  
                            // 选中的行政资源  
                            // 处理行政边界图层  
                            that.dealBorderLayer(obj.data)  
                            break  
                        case 'landTypeArr':  
                            // 林地类型数据  
                            // 处理林地类型数据  
                            that.dealLandTypeArr(obj.data)  
                            break  
                        case 'monitoringDictLayer':  
                            // 活的图层数据  
                            // 处理活的图层数据  
                            that.delMonitoringDictLayer(obj.data)  
                            break  
                        case 'fireLevelData':  
                            console.log("火险等级------",obj)  
                            // 火险等级  
                            that.dealFireLevelData(obj.data)  
                            break  
                    }  
                }  

            },  

        }  
    }  
</script>  
<style lang="scss" scoped>  
    .mapView {  
        width: 100%;  
        height: 100%;  
    }  
</style> ```

操作步骤:

当逻辑层watch监听有多个数据,都赋值给同一个对象,通过类型区分,在视图层通过类型处理接收到的数据,现在视图层接收的数据不全,有的类型的数据接收不到

预期结果:

当逻辑层watch监听有多个数据往视图层传递的时候,视图层要能正常接收逻辑层传递的数据

实际结果:

当逻辑层watch监听有多个数据,都赋值给同一个对象,通过类型区分,在视图层通过类型处理接收到的数据,现在视图层接收的数据不全,有的类型的数据接收不到

bug描述:

当逻辑层有多个数据传递到视图层的时候,有的时候视图层接收不到逻辑层传递的数据

2024-01-15 14:14 负责人:无 分享
已邀请:
1***@qq.com

1***@qq.com

解决了吗

  • 小嗨嗨 (作者)

    没解决

    2024-09-27 10:34

要回复问题请先登录注册