在 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.

  1. 在 Angular 中注册的任何内容都 无法以相同的方式在 Core 中使用;所以如果你必须创建一个核心模板;您还必须将 xmlns:blah="ns-blah" 作为核心模板的一部分传入,以便它在该核心模板中正确注册。 angular registerElement 对 Core 没有任何作用。现在您可以轻松地执行 <IC:WebImage xmlns:IC="nativescript-web-image-cache" ...> 然后它在模板中有效。但是,我建议您将 xmlns:IC 放在最顶层的元素上;因为它使阅读代码变得更加简单。但如果您没有围绕项目的父包装元素,这是使用它在同一元素上注册它的有效代码。

  2. NS-Core 模板不同于 NS-Angular 模板;如果您尝试使用在 Angular 中有效的东西,例如 <IC:WebImage [param]="value" (param)="value"/>[param](param) 都将完全破坏核心中的模板解析。 NS-Core 的解析器就像 HTML,param 两边不应该有任何东西,value 应该放在引号中。 value 可以有 {{ boundvalue }} 将动态值绑定到模板中。

  3. 通常在将 NS-Core 模板传递给您需要的任何函数时;你只想传递最少的部分;您很少需要使用 <Page><Frame> 或任何其他顶级元素。事实上,这可能会导致问题。您通常只需要要查看的布局部分。所以在这种情况下 <StackLayout xmlns:IC=...><IC:WebImage...></StackLayout>

  4. 终于在使用 Angular 中的核心功能进行故障排除时;我强烈建议您在每个元素上放置固定的 Width/Height 和背景颜色。这有时可以告诉您失败的原因。