如何在 Angular6 上将 colorFilter 与 ngx-leaflet 一起使用
How to use colorFilter with ngx-leaflet on Angular6
如何在 Angular 6 上使用像 Leaflet.TileLayer.ColorFilter with ngx-leaflet 这样的 Leaflet 插件?
我认为我的问题出在项目的导入中,因为我想使用由 ColorFilter
插件创建的函数,但此插件不是类型定义的一部分 (index.d.ts
) ngx-leaflet
个。我对吗 ?如果是,我该如何解决?有没有办法在 ColorFilter 中贡献一个类型定义,以便将来即插即用并帮助像我这样的其他人?你有一些文档吗?
这是我真正的失败:
app.module.ts
这里我导入ngx-leaflet
imports: [
...
LeafletModule.forRoot()
],
.angular-cli.json
这里我直接导入 JS 文件,因为我在 ColorFilter
插件中没有模块
"scripts": [
"../node_modules/leaflet.tilelayer.colorfilter/src/leaflet-tilelayer-colorfilter.min.js"
],
my.component.ts
import {circle, icon, latLng, marker, polygon, tileLayer} from 'leaflet';
...
ngOnInit() {
const myFilter = [
'grayscale:100%',
'invert:100%',
];
this.options = {
layers: [
tileLayer.colorFilter(
'http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
{ maxZoom: 18, attribution: '...' },
myFilter
)
],
zoom: 5,
center: latLng(46.879966, -121.726909)
};
错误
error TS2339: Property 'colorFilter' does not exist on type 'typeof
tileLayer'.
在 ngx-leaflet 模块中,它只导出指令。因此,您只能将传单附加到模板文件中的 DOM 中。从上面的代码中,您试图作为组件访问。 https://github.com/Asymmetrik/ngx-leaflet/blob/master/src/leaflet/leaflet.module.ts
根据 GitHub 文档 https://github.com/Asymmetrik/ngx-leaflet
模板:
<div style="height: 300px;"
leaflet
[leafletOptions]="options">
</div>
示例传单选项对象:
options = {
layers: [
tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { maxZoom: 18, attribution: '...' })
],
zoom: 5,
center: latLng(46.879966, -121.726909)
};
为了让 lealfet.tilelayer.colorfilter
插件在 ngx-leaflet
上工作
您需要直接在 component.ts 上导入它,因为某些原因无法通过 angular.json 导入它 - Webpack 似乎没有捆绑允许它修改 L 命名空间的文件(在我的情况下它不起作用)然后虽然你应该能够在我的例子中直接在你的组件中调用 L.tileLayer.colorFilter 但它只能使用 (L.tileLayer as any).colorFilter
.
import * as L from 'leaflet';
import "node_modules/leaflet.tilelayer.colorfilter/src/leaflet-tilelayer-colorfilter.js"
...
defaultToDarkFilter = [
'grayscale: 100%',
'invert: 100%',
];
options = {
layers: [
(L.tileLayer as any).colorFilter('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
maxZoom: 18,
attribution: '...' ,
filter: this.defaultToDarkFilter
}),
],
zoom: 3,
center: L.latLng(46.879966, -121.726909)
};
如何在 Angular 6 上使用像 Leaflet.TileLayer.ColorFilter with ngx-leaflet 这样的 Leaflet 插件?
我认为我的问题出在项目的导入中,因为我想使用由 ColorFilter
插件创建的函数,但此插件不是类型定义的一部分 (index.d.ts
) ngx-leaflet
个。我对吗 ?如果是,我该如何解决?有没有办法在 ColorFilter 中贡献一个类型定义,以便将来即插即用并帮助像我这样的其他人?你有一些文档吗?
这是我真正的失败:
app.module.ts
这里我导入ngx-leaflet
imports: [
...
LeafletModule.forRoot()
],
.angular-cli.json
这里我直接导入 JS 文件,因为我在 ColorFilter
插件中没有模块
"scripts": [
"../node_modules/leaflet.tilelayer.colorfilter/src/leaflet-tilelayer-colorfilter.min.js"
],
my.component.ts
import {circle, icon, latLng, marker, polygon, tileLayer} from 'leaflet';
...
ngOnInit() {
const myFilter = [
'grayscale:100%',
'invert:100%',
];
this.options = {
layers: [
tileLayer.colorFilter(
'http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
{ maxZoom: 18, attribution: '...' },
myFilter
)
],
zoom: 5,
center: latLng(46.879966, -121.726909)
};
错误
error TS2339: Property 'colorFilter' does not exist on type 'typeof tileLayer'.
在 ngx-leaflet 模块中,它只导出指令。因此,您只能将传单附加到模板文件中的 DOM 中。从上面的代码中,您试图作为组件访问。 https://github.com/Asymmetrik/ngx-leaflet/blob/master/src/leaflet/leaflet.module.ts
根据 GitHub 文档 https://github.com/Asymmetrik/ngx-leaflet
模板:
<div style="height: 300px;"
leaflet
[leafletOptions]="options">
</div>
示例传单选项对象:
options = {
layers: [
tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { maxZoom: 18, attribution: '...' })
],
zoom: 5,
center: latLng(46.879966, -121.726909)
};
为了让 lealfet.tilelayer.colorfilter
插件在 ngx-leaflet
上工作
您需要直接在 component.ts 上导入它,因为某些原因无法通过 angular.json 导入它 - Webpack 似乎没有捆绑允许它修改 L 命名空间的文件(在我的情况下它不起作用)然后虽然你应该能够在我的例子中直接在你的组件中调用 L.tileLayer.colorFilter 但它只能使用 (L.tileLayer as any).colorFilter
.
import * as L from 'leaflet';
import "node_modules/leaflet.tilelayer.colorfilter/src/leaflet-tilelayer-colorfilter.js"
...
defaultToDarkFilter = [
'grayscale: 100%',
'invert: 100%',
];
options = {
layers: [
(L.tileLayer as any).colorFilter('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
maxZoom: 18,
attribution: '...' ,
filter: this.defaultToDarkFilter
}),
],
zoom: 3,
center: L.latLng(46.879966, -121.726909)
};