有人可以解释Angular 2中组件中私有属性和非私有属性之间的区别吗?与此示例中的private_text
和other_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";
}
}
答案 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)
private
和public
仅供静态分析TypeScript代码的工具使用。
在运行时私人和公共都没有意义,因为JS并不了解它们。
TypeScript工具也没有检查模板字符串是否存在可能违反TypeScript规则的绑定表达式。这就是模板对于属性是私有还是公共无关紧要的原因。
据我所知,计划改进模板分析功能以识别所有类型的错误。但这只是未来。
答案 2 :(得分:3)
鼓励在打字稿中写作,因为它是一种机制,可以对你正在编写的JS执行一些规则,当你转换到ES5时应该突出显示。
在Angular2中使用依赖注入也可以在类中使用私有变量,以节省您在构造函数中显式分配它们的时间。
例如 -
js.executeScript("arguments[0].setAttribute('value', 'Text Box Enalbled !! ');", textbox );
答案 3 :(得分:2)
答案适用于Angular 2使用Typescript
一个打字稿文件总是编译成javascript,因为javascript中没有访问说明符,所以
在typescript中声明的私有变量将被编译为局部变量,而
公共变量将被编译为全局变量(即在javascript中的函数体外)。
如果您在默认情况下不提及访问说明符,则它是私有的,因此private_text和other_text没有区别