Angular 5使用ngx-leaflet-markercluster遇div属性绑定错误求助
Can't bind to 'leafletMarkerCluster'错误 我之前帮几个开发者排查过类似的问题,针对你在Angular 5里使用ngx-leaflet-markercluster v1.0.0碰到的这个属性绑定错误,给你几个实用的排查和解决思路:
确认模块导入是否正确
Angular的指令必须在对应的模块中导入才能生效,ngx-leaflet-markercluster依赖LeafletModule和自身的LeafletMarkerClusterModule。你需要在使用该组件的模块(比如AppModule或者你的FeatureModule)中同时导入这两个模块,注意Angular 5中需要使用forRoot()来初始化模块:import { LeafletModule } from '@asymmetrik/ngx-leaflet'; import { LeafletMarkerClusterModule } from '@asymmetrik/ngx-leaflet-markercluster'; @NgModule({ imports: [ // ...其他必要模块(比如BrowserModule) LeafletModule.forRoot(), LeafletMarkerClusterModule.forRoot() ] }) export class YourTargetModule { }别漏了安装原生的
leaflet和leaflet.markercluster依赖,它们是ngx封装库的基础。检查模板中指令的使用场景
错误提示说div上不存在leafletMarkerCluster属性,大概率是你把这个指令用在了没有leaflet指令的普通div上。leafletMarkerCluster是附加在leaflet地图容器上的指令,必须和leaflet指令配合使用。正确的模板结构应该是这样的:<div leaflet style="height: 400px;" [leafletOptions]="yourMapOptions" [leafletMarkerCluster]="markerClusterConfig" [leafletMarkerClusterLayers]="clusterLayers"> </div>确保这个div已经通过
leaflet指令注册为leaflet地图容器,再附加markercluster的相关指令。验证版本兼容性
你使用的v1.0.0版本的ngx-leaflet-markercluster确实是适配Angular 5的,但要注意配套的ngx-leaflet版本需要对应v3.x系列(比如v3.0.1),原生leaflet和leaflet.markercluster也建议使用兼容的版本,比如:"dependencies": { "@asymmetrik/ngx-leaflet": "^3.0.1", "@asymmetrik/ngx-leaflet-markercluster": "^1.0.0", "leaflet": "^1.2.0", "leaflet.markercluster": "^1.3.0" }版本不匹配很容易导致指令无法被正确识别。
排查拼写和语法错误
确认指令名leafletMarkerCluster的大小写和拼写完全正确,Angular的属性绑定对大小写是敏感的,别把驼峰式写成了短横线(虽然Angular支持两种写法,但模板中如果用方括号绑定,必须用驼峰式)。
关于v1.0.0版本的使用情况:我确实接触过不少开发者在Angular 5环境下成功运行这个版本,只要上述配置都到位,基本不会有问题。如果还是不行,可以尝试清理依赖缓存:删除node_modules和package-lock.json,运行npm cache clean --force后重新执行npm install,有时候缓存会导致模块加载异常。
内容的提问来源于stack exchange,提问作者Max Berg

