在 Nativescript Angular 项目中使用 Nativescript Core 插件
Use Nativescript Core plugin in Nativescript Angular project
我在我的 Nativescript Angular 应用程序中使用了 nativescript-google-maps-sdk
插件,效果很好。
我的问题是我想使用缓存图像显示在自定义信息窗口中。为此,我在应用程序范围内使用 nativescript-web-image-cache
插件。当我在 infoWindow 中使用常规 <WebImage>
标签时,它会抱怨它不是已注册的组件:
Module 'ui/web-image' not found for element 'WebImage'
应用程序的其他任何地方都运行良好。在这个issue中是不是建议:
that InfoWindowTemplate content is parsed as Vanilla NativeScript XML, not as Angular XML thus it is not able to find custom Angular Component you created
所以问题是我怎样才能继续使用这个插件?有什么方法可以注册 <WebImage>
组件,以便它可以在自定义 InfoWindow 中工作?
为了确保没有其他问题,我将 nativescript-web-image-cache
插件添加到普通的 NativesScript nativescript-google-maps-sdk
演示项目中,然后 <WebImage>
标签就可以正常工作了。
非常感谢任何指点!
由于 InfoWindowTemplate 内容被解析为 Vanilla NativeScript XML,您可以将 xmlns:IC="nativescript-web-image-cache"
添加到组件的根/父元素。也使用 <IC:WebImage>
而不是 WebImage
.
在 Angular 中注册的任何内容都 无法以相同的方式在 Core 中使用;所以如果你必须创建一个核心模板;您还必须将 xmlns:blah="ns-blah"
作为核心模板的一部分传入,以便它在该核心模板中正确注册。 angular registerElement
对 Core 没有任何作用。现在您可以轻松地执行 <IC:WebImage xmlns:IC="nativescript-web-image-cache" ...>
然后它在模板中有效。但是,我建议您将 xmlns:IC
放在最顶层的元素上;因为它使阅读代码变得更加简单。但如果您没有围绕项目的父包装元素,这是使用它在同一元素上注册它的有效代码。
NS-Core 模板不同于 NS-Angular 模板;如果您尝试使用在 Angular 中有效的东西,例如 <IC:WebImage [param]="value" (param)="value"/>
,[param]
和 (param)
都将完全破坏核心中的模板解析。 NS-Core 的解析器就像 HTML,param
两边不应该有任何东西,value
应该放在引号中。 value
可以有 {{ boundvalue }}
将动态值绑定到模板中。
通常在将 NS-Core 模板传递给您需要的任何函数时;你只想传递最少的部分;您很少需要使用 <Page>
、<Frame>
或任何其他顶级元素。事实上,这可能会导致问题。您通常只需要要查看的布局部分。所以在这种情况下 <StackLayout xmlns:IC=...><IC:WebImage...></StackLayout>
终于在使用 Angular 中的核心功能进行故障排除时;我强烈建议您在每个元素上放置固定的 Width/Height 和背景颜色。这有时可以告诉您失败的原因。
我在我的 Nativescript Angular 应用程序中使用了 nativescript-google-maps-sdk
插件,效果很好。
我的问题是我想使用缓存图像显示在自定义信息窗口中。为此,我在应用程序范围内使用 nativescript-web-image-cache
插件。当我在 infoWindow 中使用常规 <WebImage>
标签时,它会抱怨它不是已注册的组件:
Module 'ui/web-image' not found for element 'WebImage'
应用程序的其他任何地方都运行良好。在这个issue中是不是建议:
that InfoWindowTemplate content is parsed as Vanilla NativeScript XML, not as Angular XML thus it is not able to find custom Angular Component you created
所以问题是我怎样才能继续使用这个插件?有什么方法可以注册 <WebImage>
组件,以便它可以在自定义 InfoWindow 中工作?
为了确保没有其他问题,我将 nativescript-web-image-cache
插件添加到普通的 NativesScript nativescript-google-maps-sdk
演示项目中,然后 <WebImage>
标签就可以正常工作了。
非常感谢任何指点!
由于 InfoWindowTemplate 内容被解析为 Vanilla NativeScript XML,您可以将 xmlns:IC="nativescript-web-image-cache"
添加到组件的根/父元素。也使用 <IC:WebImage>
而不是 WebImage
.
在 Angular 中注册的任何内容都 无法以相同的方式在 Core 中使用;所以如果你必须创建一个核心模板;您还必须将
xmlns:blah="ns-blah"
作为核心模板的一部分传入,以便它在该核心模板中正确注册。 angularregisterElement
对 Core 没有任何作用。现在您可以轻松地执行<IC:WebImage xmlns:IC="nativescript-web-image-cache" ...>
然后它在模板中有效。但是,我建议您将xmlns:IC
放在最顶层的元素上;因为它使阅读代码变得更加简单。但如果您没有围绕项目的父包装元素,这是使用它在同一元素上注册它的有效代码。NS-Core 模板不同于 NS-Angular 模板;如果您尝试使用在 Angular 中有效的东西,例如
<IC:WebImage [param]="value" (param)="value"/>
,[param]
和(param)
都将完全破坏核心中的模板解析。 NS-Core 的解析器就像 HTML,param
两边不应该有任何东西,value
应该放在引号中。value
可以有{{ boundvalue }}
将动态值绑定到模板中。通常在将 NS-Core 模板传递给您需要的任何函数时;你只想传递最少的部分;您很少需要使用
<Page>
、<Frame>
或任何其他顶级元素。事实上,这可能会导致问题。您通常只需要要查看的布局部分。所以在这种情况下<StackLayout xmlns:IC=...><IC:WebImage...></StackLayout>
终于在使用 Angular 中的核心功能进行故障排除时;我强烈建议您在每个元素上放置固定的 Width/Height 和背景颜色。这有时可以告诉您失败的原因。