Angular2:对于将在视图中访问的打字稿属性和函数的推荐访问修饰符是啥[关闭]

Posted

技术标签:

【中文标题】Angular2:对于将在视图中访问的打字稿属性和函数的推荐访问修饰符是啥[关闭]【英文标题】:Angular2: What is the recommended access modifier for typescript properties and functions that will be accessed in the view [closed]Angular2:对于将在视图中访问的打字稿属性和函数的推荐访问修饰符是什么[关闭] 【发布时间】:2018-02-14 05:13:38 【问题描述】:

对于仅在视图中使用的 ng2 属性和方法,推荐的访问修饰符是什么?

我一直在使用私人,但遇到了这个帖子,这不鼓励它:Angular2 - should private variables be accessible in the template?

同时,将所有内容标记为公开似乎并不正确,保护也不正确。

【问题讨论】:

这是个好问题。请在阅读完您最后所做的所有答案后分享您的观点。 【参考方案1】:

起初似乎不需要 Public,因为这意味着任何东西都可以访问它。但问题是,它们并不是真的。

实例化一个组件来调用它的属性和方法是没有意义的。相反,组件类的目的是支持模板。

如果你有一个子组件,你可以使用@Input 获取它的属性。

您可以使用@ViewChild@ViewChildren 来获取子组件并访问其属性或方法。我刚刚尝试过,确实可以访问公共属性,而不能访问私有属性。但这是我能想到的唯一场景。

还有其他你在想的场景吗?

【讨论】:

感谢您的回答。我有一个视图用于显示/隐藏元素的字段,其值由@Input 的设置器设置。我不喜欢公开这个属性,因为它的值应该由这个设置器专门设置。我想为了代码的纯度,我也可以继续处理这个属性的 setter/getter 事件。 @DeborahK,你能回答这个问题吗?我是从单元测试的角度问的。假设我有一个事件处理程序OnToggleSwitchChange()。这将在其模板中使用,但不会被任何其他组件使用。它的访问方式应该是什么?公共或私人。或者要在同一页面上,您可以采取任何关于复数视觉的示例,然后进行解释(顺便说一句,我会关注您的所有讲座:-))。 当一个方法是私有的,它甚至不能被它的模板访问,只能被组件中的其他代码访问。所以组件中的大部分方法都需要公开,模板才能访问它们。并且使用 Angular v9 中新的默认编译器,模板访问的私有方法会产生语法错误。【参考方案2】:

目前,“public”可能是理想的,虽然“protected”会抑制 ALS 警告消息,但如果您依赖 AOT 编译,则应避免使用。

Angular Language Service(您的 IDE 可能会使用它来突出显示代码中的错误/警告)在使用 private 作为访问修饰符会员。

关于此主题的*** answer for a similar question 涉及警告消息也指向a related access/AOT git hub issue 讨论,这可以解释为什么存在警告并涉及 AOT 和非 AOT 中的“公共”与“私人”以及之间的微妙之处TypeScript 与 javascript 中的访问修饰符。

只要我不关心 Ahead-of-Time (AOT) 编译,我在使用“受保护”时成功地避免了 IDE 中的警告,但我从未在其他地方看到过这种建议。

【讨论】:

以上是关于Angular2:对于将在视图中访问的打字稿属性和函数的推荐访问修饰符是啥[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用打字稿在angular2中获取设备显示的高度和宽度?

打字稿定义无法导入Angular2

将 CodeMirror 与 Angular2 集成(打字稿)

Visual Studio 打字稿与 Angular 2 冲突

何时在 Angular2 打字稿中创建构造函数?

“ng2-CKEditor”节点模块不适用于打字稿[Angular2]