Angularjs 暴露于angular 1.x视图的Typescript私有和受保护成员

Angularjs 暴露于angular 1.x视图的Typescript私有和受保护成员,angularjs,typescript,Angularjs,Typescript,当结合TS和angular时,控制器上的所有内容都暴露在视图中。在我的情况下,myPrivate将出现在$ctrl上 class MyController extends BaseController implements SomeInterface { private myPrivate: string = 'myPrivateString'; } 有没有解决这个问题的办法?当您查看生成的javascript时,很明显这是为什么 var MyController=(函数(\u sup

当结合TS和angular时,控制器上的所有内容都暴露在视图中。在我的情况下,
myPrivate
将出现在
$ctrl

class MyController extends BaseController implements SomeInterface {
    private myPrivate: string = 'myPrivateString';
}

有没有解决这个问题的办法?

当您查看生成的javascript时,很明显这是为什么

var MyController=(函数(\u super){
__扩展(MyController,_super);
函数MyController(){
_super.apply(这个,参数);
this.myPrivate='myPrivateString';
}
返回MyController;
}(基站控制器);
您的私有财产最终与控制器上的任何其他财产一样

你可以看到完全透明

一个解决方案是让参数化的基本控制器能够为视图设置类似视图模型的内容,而不是常规的$ctrl

它看起来像这样:

类基本控制器{
保护范围;
受保护的视图模型:T;
构造函数(作用域:any,模型类型:{new():T;}){
this.scope=范围;
this.viewModel=新模型类型();
this.scope[“viewModel”]=this.viewModel;
}
}
类MySpecificularViewModel{
视图的公共内容:字符串;
}
类MyController扩展BaseController实现SomeInterface{
private myPrivate:string='myPrivateString';
建造商(范围){
super(范围,MySpecialVIEWModel);
}
}
在视图中,您可以使用viewModel属性访问所需的属性


我在一个实际项目中使用了它,效果非常好。您可以看到我用于获取更多信息的初学者模板。

您是否尝试了参数化构造函数来初始化您的私有成员?我不仅要区分,而且要阻止实际使用。这实际上是一个非常可靠的论点。感谢+1花时间回复并给出了一个好主意,但是我考虑过类似的事情,希望能有一些不那么零碎的东西。我不知道如何,如果你要将你的控制器直接注入到视图中,那么它的所有属性都可以供视图使用。tsc只在编译时才考虑private关键字,任何人都可以在运行时使用它。。它允许您在控制器和视图之间建立适当的契约(以防您想要重用控制器)。