如果一个变量在一个组件类上声明为private,我应该能够在该组件的模板中访问它吗?

@Component({
  selector: 'my-app',
  template: `
    <div>
      <h2>{{title}}</h2>
      <h2>Hello {{userName}}</h2> // I am getting this name
    </div>
  `,
})
export class App {
  public title = 'Angular 2';
  private userName = "Test Name"; //declared as private
}

推荐答案

不,你不应该在模板中使用私有变量.

虽然我喜欢drewmoore's answer,并认为其中有完美的概念逻辑,但在实现方面它是错误的.模板不存在于组件类内,但存在于组件类外.看看this repo的证据.

它之所以有效,唯一的原因是TypeScript的private关键字并没有真正将成员私有化.即时编译是在运行时在浏览器中进行的,JS没有任何私有成员的概念(到目前为止?).因为我走上了正确的道路,我得到了Sander Elias分的赞扬.

使用ngc和提前编译,如果try 从模板访问组件的私有成员,就会出现错误.克隆演示repo,将MyComponent个成员的可见性更改为private,运行ngc时会出现编译错误.这里还有answer个提前编译的具体例子.

Typescript相关问答推荐

Angular 17 -如何使用新的@if语法在对象中使用Deliverc值

类型断言添加到类型而不是替换

带有联合参数的静态大小数组

typescribe不能使用值来索引对象类型,该对象类型满足具有该值的另一个类型'

如何重构长联合类型?

TypeScrip 5.3和5.4-对`Readonly<;[...number[],字符串]>;`的测试版处理:有什么变化?

在另一个类型的函数中,编译器不会推断模板文字类型

垫表页脚角v15

有没有办法防止类型交集绕过联合类型限制?

类型';字符串|数字';不可分配给类型';未定义';.类型';字符串';不可分配给类型';未定义';

专用路由组件不能从挂钩推断类型

类型脚本-处理值或返回值的函数

回调函数中的TypeScrip类型保护返回Incorect类型保护(具有其他未定义类型的返回保护类型)

使用Type脚本更新对象属性

为什么在泛型方法中解析此promise 时会出现类型错误?

有没有更干净的方法来更新**key of T**的值?

什么';是并类型A|B的点,其中B是A的子类?

Typescript 和 Rust 中跨平台的位移数字不一致

元素隐式具有any类型,因为string类型的表达式不能用于索引类型{Categories: Element;管理员:元素; }'

将函数签名合并到重载中