提问人:Errand 提问时间:7/19/2023 更新时间:7/20/2023 访问量:31
Vue 未更新 Esri Map 的值
vue is not updating the values of esri map
问:
我有以下可组合项:
export const useEsriMap = () => {
const mapObject = ref()
const esriObject = computed(() => mapObject.value.esriObject)
const panTo = (lat, long) => {
esriObject.value.panTo([lat, long])
}
return {
panTo,
esriObject,
}
}
我从另一个组件调用可组合项的地方:
componentA.vue:
const focus = () => {
panTo(Number(props.location.lat), Number(props.location.long))
}
我有一个componentB.vue,我正在其中实现Esri地图,如下所示:
componentB.vue:
const { esriObject } = useEsriMap()
let map: WebMap | null = null
let view: MapView | null = null
onMounted(async () => {
map = new WebMap({
basemap: 'arcgis-navigation',
})
view = new MapView({
container: mapViewNode.value! as HTMLDivElement,
map,
zoom: 12,
center: [0, 0],
})
})
watch(
() => esriObject,
() => {
view
?.when(() => {
view?.goTo({
center: [esriObject.value],
zoom: 12,
})
})
.catch((err) => {
console.error('MapView rejected:', err)
})
},
)
我从项目中的不同位置调用 panTo 方法,每次都为其提供不同的坐标,因此我正在更新计算的 lat,long useEsriMap 可组合项。
每当我调用 panTo 方法时,我都会收到这样的错误:
Uncaught TypeError: Cannot read properties of undefined (reading 'esriObject')
那么,如何实现每当地图视图更新时将地图视图更改为坐标的方式呢?
Thnx提前寻求帮助。
答:
0赞
scccboom
7/19/2023
#1
import { reactive, computed } from "vue";
const mapObject = reactive({
lat: 0,
long: 0,
});
const esriObject = computed(() => {
return [mapObject.lat, mapObject.long];
});
export const useEsriMap = () => {
const panTo = (lat, long) => {
mapObject.lat = lat;
mapObject.long = long;
};
return {
panTo,
esriObject,
};
};
评论
0赞
Errand
7/20/2023
Thnx 的答案,但问题是我无法从 componentB.vue 内部收听或看到这些值并基于此触发视图 goTo 方法:/
上一个:ArcPro 数据更新
评论