Angular 2:组件中私有属性和公共属性之间的确切区别是什么?

时间:2016-08-24 09:14:51

标签: angular

有人可以解释Angular 2中组件中私有属性和非私有属性之间的区别吗?与此示例中的private_textother_text一样:

import { Component } from '@angular/core';

@Component({
  moduleId: module.id,
  selector: 'my-component',
  template: '<div>{{private_text}}</div><div>{{other_text}}</div>'
})
export class MyComponent {

  private private_text:string;
  other_text:string;

  constructor() {
    this.private_text = "hello";
    this.other_text = "hello";
  }

}

4 个答案:

答案 0 :(得分:12)

公开:

打字稿成员默认是公开的。

因此,如果我使用方法myClass或只有public myMethod() {}的课程myMethod(){},则将我的课程导入另一个文件。我现在在另一个类constructor(my_class: myClass) {}的构造函数中定义。现在,我可以在其他课程中的任何地方拨打this.my_class.myMethod()。如果它是私人的。这不起作用。

私有:

“当成员被标​​记为私有时,无法从其包含的类外部访问它”

真的很困惑,为什么没有人引用这个。我认为以下链接确实会有所帮助。

https://www.typescriptlang.org/docs/handbook/classes.html#public-private-and-protected-modifiers

答案 1 :(得分:8)

privatepublic仅供静态分析TypeScript代码的工具使用。

在运行时私人和公共都没有意义,因为JS并不了解它们。

TypeScript工具也没有检查模板字符串是否存在可能违反TypeScript规则的绑定表达式。这就是模板对于属性是私有还是公共无关紧要的原因。

据我所知,计划改进模板分析功能以识别所有类型的错误。但这只是未来。

答案 2 :(得分:3)

私有和公共是打字稿概念,而不是Angular2。

鼓励在打字稿中写作,因为它是一种机制,可以对你正在编写的JS执行一些规则,当你转换到ES5时应该突出显示。

在Angular2中使用依赖注入也可以在类中使用私有变量,以节省您在构造函数中显式分配它们的时间。

例如 -

js.executeScript("arguments[0].setAttribute('value', 'Text Box Enalbled !! ');", textbox );

答案 3 :(得分:2)

答案适用于Angular 2使用Typescript

一个打字稿文件总是编译成javascript,因为javascript中没有访问说明符,所以

  1. 在typescript中声明的私有变量将被编译为局部变量,而

  2. 公共变量将被编译为全局变量(即在javascript中的函数体外)。

  3. 如果您在默认情况下不提及访问说明符,则它是私有的,因此private_text和other_text没有区别