Angular 6 私有方法

2024-03-10

我们正在从 Angular 5 升级到 Angular 6。我们有一个共享库,但遇到了构建错误。作为一家 Java 商店,我们养成了将组件方法和属性标记为私有的习惯。在 Angular 6 中构建我们的库时(转换并使用新的库 CLI 功能后),我们得到:

Property 'getCurrentYear' is private and only accessible within class.

实际上,模板 html 中使用的任何属性或方法都不能再在组件类上标记为私有。当然,我们可以通过删除“private”修饰符来解决这个问题。当我们使用 Angular 5 生成库时,情况并非如此https://github.com/raphael-volt/ng2-testable-lib https://github.com/raphael-volt/ng2-testable-lib.

奇怪的是,这只发生在编译我们的库时。我们将应用程序升级到 Angular 6,该应用程序在模板中的组件/用法上也具有私有属性和方法,并且没有任何问题。

我们发现错误了吗?是否有我们没有遵守的最佳实践?


在 Angular 中,我们有两种编译模型

  • JIT-- 即时编译:JIT编译顾名思义,在浏览器中即时编译应用程序 运行。

  • AoT - 提前编译:AoT 编译在构建时编译应用程序。

默认情况下,使用开发版本,即ng serve我们得到 JIT 编译。这就是它的工作原理。应用程序代码与角度编译器一起由浏览器下载。在运行时,当向应用程序发出请求时,浏览器中的 JIT 编译器会在执行应用程序代码之前对其进行编译。

与生产版本即ng build --prod我们得到 AoT 编译,角度应用程序是预编译的。因此,这意味着浏览器加载可执行代码,以便它可以立即呈现应用程序,而无需先等待编译应用程序。

打字稿public没关系但是private does

来自 Angular 文档
All data bound https://stackoverflow.com/a/39367574/5695162属性必须是 TypeScript 公共的 特性。 Angular 永远不会绑定到 TypeScript 私有属性。

事实上,它确实绑定到private属性,但不在AoT mode

Why AOT Compiler requires public properties, while non-AOT allows private properties? https://github.com/angular/angular/issues/11978

通过 JIT,我们将所有代码转换为 ES5,然后在运行时进行绑定。所有可见性修饰符都会在这个过程中丢失,所以如果你说的话也没关系public or private为了那个原因。

另一方面,通过 AoT,我们为模板生成一些打字稿代码,这些代码将尝试访问这些字段。如果他们是private,他们根本无法访问这些属性,因此,您需要将它们作为public.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Angular 6 私有方法 的相关文章

随机推荐

  • 使用 PHP 检查 IPv4/IPv6 地址是否已启动

    我有一个 IPv4 地址 前任 172 19 20 21 我曾经这样做过 fs fsockopen ip port errno errstr 3 if fs error SSC is down return Redirect to gt w
  • ListGetAt 解析 CSV 文件时出现问题

    我有一个脚本 它从客户端读取 CSV 文件 并将这些值拆分为稍后将输入数据库的变量 这是当 CSV 中的列数少于所需的最小值时出现的错误 In function ListGetAt list index delimiters the val
  • 在python中手动绘制树状图

    我已经实现了一种算法来解决图中的聚类问题 我使用 python 库 python graph 来表示该图 现在 在计算的每一步 算法是迭代的 我必须绘制树状图的一部分 事实上 该算法是分裂的 从原始图开始计算簇的意义上来说 现在 我不知道用
  • “gprof”在特定代码行上花费的时间

    我一直在使用gprof分析器结合g 我的代码中有一个函数 它封装了与主要函数足够相关的几个行为部分 因此将它们分成自己的函数是没有意义的 我想知道在每个代码区域花费了多少时间 所以 如果你想象代码看起来像 function A A A B
  • C: IFS System() 漏洞

    出于教育原因 我必须利用 C 代码 该程序首先设置了egid 然后设置了漏洞system usr bin 命令 所以我在我的主目录中创建了一个 usr 可执行文件 并将路径设置为主目录PATH HOME PATH 我想将 bash 中的 I
  • 如何从字符串末尾获取数字

    我对 Ruby 还是个新手 有点卡住了 我需要从字符串末尾获取一个数字 假设我有字符串 potato85 我需要 85 数字中的位数可以有所不同 例如 potato8 potato8585 有什么方法可以分割字符串并获取第一部分和数字吗 使
  • JSON 概念与 JavaScript 和 PHP

    我需要有人来阐明这个问题 当一个人进行 AJAX 调用时 会调用一个 php 脚本 该脚本会回显 json encode 内容 以便 javascript 可以对其进行处理 注意 假设我们在 php 脚本中将 header 设置为 json
  • pudb调试器可以在windows上使用吗?

    我们有可能pudb http pypi python org pypi pudbWindows 上的 python 调试器 如果是 您如何安装并运行它 当我尝试使用安装它时ez setup http peak telecommunity c
  • ruby 如何处理 + 运算符?

    Ruby 不支持递增变量 例如variable 我看到这种行为 2 4 gives 6 事实上 任意数量的 两个变量之间的符号被视为一个单一的 ruby 是如何做到这一点的呢 既然 ruby 这样做了 是否可以将其视为不可用的原因 操作员
  • 同一个父辈下的2个看似独立的观点该如何互动

    请考虑以下场景
  • SQLite 错误:“无法将文本值转换为数值。”

    我找到了解决方法 但我对 Adob e Air 和 SQLite 遇到的问题完全感到困惑 一个UPDATE我认为在开发过程早期工作正常的查询突然开始失败并出现错误details could not convert text value to
  • Xamarin xml android:onClick 回调方法

    这是我的 XML 代码
  • 使路径在 Linux 和 Windows 上都有效

    我怎样才能确保这条路径 new Zend Log Writer Stream APPLICATION PATH logs app log 在linux和windows上都可以工作吗 在Linux中 路径分隔符是 在 Windows 中 可以
  • 通过 cmake 重用静态库的自定义 makefile

    我想这将是一个关于在 cmake 中包含具有现有 makefile 的库的通用问题 但这是我的背景 我正在尝试包括scintilla在另一个CMake项目中 我遇到以下问题 在 Linux 上 scintilla 有一个 makefile
  • C# RestSharp PUT 方法并发送原始字节 (protobuf)

    如何使用 HTTP PUT 方法发送字节数组 方法AddFile班级的RestRequest发送额外的标头 方法AddParameter需要一个Object type 我是怎么做的 byte data using var ms new Me
  • “运行方式 -> Android 应用程序”不再是我的 Eclipse 运行配置中的选项

    我在 Win7 机器上运行 Eclipse 3 7 2 我有 Android SDK 和 AVD 一切都运转良好 我有一个 Android 应用程序项目 已在 AVD 和真实 Android 设备上的模拟器下运行 亚行也运作良好 在某个时候
  • Jetpack 编写代码以在单击文本时向下滚动到特定 UI 元素的位置

    我试图在单击文本时向下滚动到特定 UI 元素的位置 我的文本的代码是 Text What is autosaving color colorResource id R color text highlight fontSize with L
  • 如何在android较低版本的设备上用javascript和html实现onclick?

    我正在开发一个在更高版本的设备中完美运行的项目 我已经在 4 1 2 版本中检查过它 问题是它不适用于 Android 版本 2 2 1 和 2 3 5 的设备 我有六张图像 我添加了功能 2 个图像的功能是使用 id 值调用不同的 HTM
  • 在 Visual Studio 2012 中,法语键盘上的向后导航快捷键是什么?

    自从我想知道如何使用 Visual Studio 中的向后和向前导航以来已经有一段时间了法语 fr FR 键盘 将鼠标悬停在按钮上 看起来像这样 Navigate backward Ctrl Navigate forward Ctrl Sh
  • Angular 6 私有方法

    我们正在从 Angular 5 升级到 Angular 6 我们有一个共享库 但遇到了构建错误 作为一家 Java 商店 我们养成了将组件方法和属性标记为私有的习惯 在 Angular 6 中构建我们的库时 转换并使用新的库 CLI 功能后