我正在尝试为该博客构建用于生产的 angular2应用程序。在ngc成功编译之后,当进行tsc编译时,它将生成以下图像中所示的错误:
搜索了一会儿后,我发现这个博客在“上下文属性”部分解释了该问题,我无法正确理解该问题可能是因为它为您提供了一个很好的主意,那就是发生了什么问题。基本上,当我们将变量设为私有时,我们得到“错误:属性是私有的,并且只能在类中访问”。我不明白为什么会这样。
过去几天,我们一直在努力解决这个问题,请为我们提供帮助。
Answers:
对于给定的组件,其模板访问的所有成员(方法,属性)在AOT编译方案中必须是公共的。这是由于将模板转换为TS类。现在,生成的类和组件是2个单独的类,您不能跨类访问私有成员。
简而言之:如果要使用提前编译,则无法访问模板中的私有成员。
所以我解决了这个问题,我将使其简短而简单。为了解决这个问题,我深入阅读了此博客。如“ 上下文属性 ” 部分中所述,此问题的解决方案是,如果要在使用AOT创建构建(即Ahead Of Time)时直接在视图中使用它,则不要使用或创建私有变量。生产。
*例如 *
// component.ts
@Component({
selector: 'third-party',
template: `
{{ _initials }}
`
})
class ThirdPartyComponent {
private _initials: string;
private _name: string;
@Input()
set name(name: string) {
if (name) {
this._initials = name.split(' ').map(n => n[0]).join('. ') + '.';
this._name = name;
}
}
}
输出: 属性'_initials'是私有的,只能在类'ThirdPartyComponent'中访问。
解:
更新private _initials: string;
为简单_initials: string;
为此,Harish Gadiya为此提供了一些帮助。
_name
那里使用,它可以与您使用的相同,也可以使用this.
其他name
局部变量this.name=name;
this.name=name
在set name
inf中。递归
this.
好的,这确实是一个简单的javascript es6问题,如果您必须将数据类型设为私有,则可以简单地执行此操作
privateAccess(){
return this.cannotAccessByInstanceButStillNeeded
}
如果您想在路由器中使用路由器,请将其公开。
例如:
<button
[routerLink]="['/login']"
[queryParams]="{redirectTo: router.url}"
translate="Please sign in to use this feature"
/>
import { Router } from '@angular/router';
constructor(
public router: Router; // don't make it private
) {}
在Github CI向我发送警告邮件之前,我一直忽略了它。