首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >是否可以将@ViewChild标记为私有?

是否可以将@ViewChild标记为私有?
EN

Stack Overflow用户
提问于 2018-12-05 03:54:02
回答 4查看 2.4K关注 0票数 6

如果ViewChild没有在模板中被引用,是否可以将其标记为私有?

我已经能够做到这一点,然后使用'--prod‘标志构建和服务,并且没有遇到错误。我目前使用的是Angular 7。

@ViewChild(HelloComponent) private helloComponent;

下面是我所讨论的内容的堆栈闪电战:

https://stackblitz.com/edit/angular-vxbpuk?file=src%2Fapp%2Fapp.component.ts

我想我有使用aot的stackblitz,但你可以在本地验证同样的事情。

编辑:我很抱歉之前没有提出这个问题,但是angular文档中的这段回复让我犹豫了一下:

https://angular.io/guide/aot-compiler#phase-2-code-generation

修饰的组件类成员必须是公共的。不能将@Input()属性设置为私有或内部。

但正如@GCSDC已经在下面指出的那样,Angular团队似乎在他们的示例中使用了私有成员:

https://angular.io/guide/component-interaction#parent-calls-an-viewchild

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-12-05 04:03:35

看起来是的,这是可以的,因为你可能会发现它也在官方的角度基础指南上做了,位于:

组件&模板>组件交互> Parent calls an @ViewChild()

@ViewChild(CountdownTimerComponent)私有timerComponent: CountdownTimerComponent;

票数 4
EN

Stack Overflow用户

发布于 2018-12-05 04:04:57

是的,这样做是可以的。由于此变量的作用域仅限于component类,因此我们可以将其声明为private并使用。

@ViewChild是为了在component内部与子component交互而使用的,所以我们可以让它保持private

票数 1
EN

Stack Overflow用户

发布于 2018-12-05 04:43:32

privatepublic语法是对javascript语言的增强,用于typescript transpiler中的“静态分析”,我建议您尝试playground如何将typescript转换为JS。所以基本上,这是一种让任何阅读代码的人都能了解变量/函数的作用域的方法。类内的简单变量的示例是它们都转换为相同的JS private var1: number = 0public var1: number = 0转换为this.var1 = 0

然而!在某些情况下,你可能真的想从父组件访问@ViewChild,但在这种情况下,你必须将其设置为@ViewChild(HelloComponent) public helloComponent;,否则将会出现“编译/转译”错误。如果您想更清楚地了解作用域在哪里,请将其保留为private,而不是像这样使用getter/setter:

export class MyComponent {

  @ViewChild(HelloComponent) private _helloComponent;

  get helloComponent(): any {
    return _helloComponent;
  }

  set helloComponent(set: any) {
    this._helloComponent = set;
  }

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53620472

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档