Sco*_*ott 9 private shared-libraries angular
我们从5升级到Angular 6.我们有一个共享库,我们遇到了构建错误.作为一个Java商店,我们养成了将组件方法和属性标记为私有的习惯.在Angular 6中构建我们的库(在转换和使用新的库CLI功能之后),我们得到:
Property 'getCurrentYear' is private and only accessible within class.
Run Code Online (Sandbox Code Playgroud)
实际上,模板html中使用的任何属性或方法都不能在组件类上标记为私有.当然,我们可以通过删除'private'修饰符来解决这个问题.当我们使用https://github.com/raphael-volt/ng2-testable-lib生成我们的库时,在角度5中不是这种情况.
奇怪的是,只有在编译我们的库时才会发生这种情况.我们将应用程序升级到角度6,该模型还具有模板中组件/用法的私有属性和方法,并且没有问题.
我们找到了错误吗?有没有我们不遵守的最佳做法?
Vik*_*kas 20
在Angular中,我们有2个编译模型
JIT - 即时编译:顾名思义,JIT编译在运行时在浏览器中编译应用程序Just-in-Time.
AoT - 提前编译: AoT编译在构建时编译应用程序.
默认情况下,使用开发构建即ng serve
我们获得JIT编译.这是它的工作原理.浏览器下载应用程序代码和角度编译器.在运行时,当向应用程序发出请求时,浏览器中的JIT编译器在执行之前编译应用程序代码.
使用生产构建即ng build --prod
我们获得AoT编译角度应用程序是预编译的.所以这意味着浏览器加载可执行代码,以便它可以立即呈现应用程序,而无需先等待编译应用程序.
TypeScript public
并不重要,但private
确实如此
来自Angular Docs
所有data bound
属性都必须是TypeScript公共属性.Angular永远不会绑定到TypeScript私有属性.
实际上,它确实绑定到private
属性,但不绑定AoT mode
Why AOT Compiler requires public properties, while non-AOT allows private properties?
使用JIT,我们将所有代码转换为ES5,然后在运行时,我们进行绑定.所有可见性修饰符都在该过程中丢失,因此无论您是说public
还是private
为此都无关紧要.
另一方面,使用AoT,我们为模板生成一些打字稿代码,这些代码将尝试访问这些字段.如果是private
,他们根本无法访问这些属性,因此,您需要将它们作为public
.
归档时间: |
|
查看次数: |
1868 次 |
最近记录: |