有什么方法可以在 Angular 的 HTML 模板中提供 class 中的私有 属性 吗?
Is there any way to have a private property in a class that is available in the HTML template in Angular?
我正在制作一些自定义组件,这些组件将用于我项目的不同部分(可能不止一个项目),我想在这些组件的 HTML 模板中呈现一些属性组件,但也不能作为 public
用于可能包含所述组件的其他组件。
例如:
我的通用组件
@Component({
selector: 'my-component',
templateUrl: './my-component.component.html',
styleUrls: ['./my-component.component.scss'],
})
export class MyComponent implements OnInit {
title:string='TITLE'; // public because otherwise the template can't use it
}
在其模板中包含 MyComponent
的其他组件
@Component({
selector: 'other-component',
templateUrl: './other-component.component.html',
styleUrls: ['./other-component.component.scss'],
})
export class OtherComponent implements OnInit {
@ViewChild(MyComponent) my:MyComponent;
...
fun(){
this.my.title = "other title"; // this is what I don't want to happen
}
...
}
有没有办法避免OtherComponent
能够使用MyComponent.title
?
无法将 Angular 组件的私有属性公开给组件的 HTML 模板。
您可以通过提供 get 方法而不是 set 方法将 属性 公开为只读 属性:
private _title:string='TITLE';
get title(): {
return this._title;
}
在你的第二个组件中,这个方法应该抛出一个错误,因为标题是只读的 属性:
this.my.title = "other title";
如果需要,您应该能够访问该值,如下所示:
console.log(this.my.title);
但是,将无法设置。
这里需要注意的是,如果您不使用文字,而是使用数组或 object,即使不设置主 属性,也可以修改 object 属性。
private _myObject = {};
get myObject(): {
return this._myObject;
}
那么这样就可以了:
this.my.myObject.title = "other title";
我正在制作一些自定义组件,这些组件将用于我项目的不同部分(可能不止一个项目),我想在这些组件的 HTML 模板中呈现一些属性组件,但也不能作为 public
用于可能包含所述组件的其他组件。
例如:
我的通用组件
@Component({
selector: 'my-component',
templateUrl: './my-component.component.html',
styleUrls: ['./my-component.component.scss'],
})
export class MyComponent implements OnInit {
title:string='TITLE'; // public because otherwise the template can't use it
}
在其模板中包含 MyComponent
的其他组件
@Component({
selector: 'other-component',
templateUrl: './other-component.component.html',
styleUrls: ['./other-component.component.scss'],
})
export class OtherComponent implements OnInit {
@ViewChild(MyComponent) my:MyComponent;
...
fun(){
this.my.title = "other title"; // this is what I don't want to happen
}
...
}
有没有办法避免OtherComponent
能够使用MyComponent.title
?
无法将 Angular 组件的私有属性公开给组件的 HTML 模板。
您可以通过提供 get 方法而不是 set 方法将 属性 公开为只读 属性:
private _title:string='TITLE';
get title(): {
return this._title;
}
在你的第二个组件中,这个方法应该抛出一个错误,因为标题是只读的 属性:
this.my.title = "other title";
如果需要,您应该能够访问该值,如下所示:
console.log(this.my.title);
但是,将无法设置。
这里需要注意的是,如果您不使用文字,而是使用数组或 object,即使不设置主 属性,也可以修改 object 属性。
private _myObject = {};
get myObject(): {
return this._myObject;
}
那么这样就可以了:
this.my.myObject.title = "other title";