“privé” et “public” dans Angulaire de la composante
Si je ne suis pas d'ajouter privé avant foo
, loadBar
, ettext
, je crois qu'ils sont public par défaut.
export class RandomComponent {
@Input() foo: string;
@Output() loadBar = new EventEmitter();
text: string;
}
Est-il un cas d'utilisation lorsqu'ils sont public
dans le composant?
Pour l'encapsulation/des raisons de sécurité, dois-je toujours ajouter private
pour chacun d'eux, comme ci-dessous?
export class RandomComponent {
@Input() private foo: string;
@Output() private loadBar = new EventEmitter();
private text: string;
}
Grâce
Vous devez vous connecter pour publier un commentaire.
Il y a beaucoup à dire en réponse à cette question, ce sont les premières pensées qui a sauté à l'esprit:
D'abord et avant tout, gardez à l'esprit que
private
est seulement au moment de la compilation, la construction, il ne peut pas être appliquée au moment de l'exécution (voir ici et ici pour la discussion). En tant que tel, veuillez vous détromper vous-même de toutes les notions deprivate
être utile en aucune manière à des fins de sécurité. Ce n'est tout simplement pas de quoi il s'agit.Il est sur l'encapsulation, et quand vous avez un champ ou une méthode sur votre composant que vous souhaitez pour encapsuler en elle, précisant qu'elle ne devrait pas être accessible depuis n'importe où d'autre, alors vous devriez absolument faire
private
: c'est ce Queprivate
est pour: Il signale à votre intention que tout ce que vous avez mis, il ne devrait pas être entrepris, à partir de l'extérieur de la classe.Il en va de même pour
public
: Il est aussi une compilation construire, donc le fait que les membres de la classe sontpublic
par défaut, si cela est vrai, a exactement zéro sens au moment de l'exécution. Mais quand vous avez un membre que vous avez explicitement l'intention de les exposer au monde extérieur comme une partie de votre classe de l'API, vous devez absolument vous rendrepublic
pour signaler cette intention: c'est ce Quepublic
est pour.Tout ceci est applicable à la Machine en général. Dans Angulaire précisément, il y a certainement valide en cas d'utilisation pour avoir le public et les membres composant les classes: Par exemple, lors de la mise en œuvre de la conteneur/composant (aka smart/muet) modèle, avec des "sourds-muets" les enfants de l'injection de "intelligents" les parents par l'intermédiaire du constructeur d'injection, il est extrêmement important de communiquer votre intention sur ce que les membres du parent qui doit et ne doit pas être touché par les enfants: dans le cas Contraire, ne soyez pas surpris quand vous prenez un de ces stupides enfants dupant autour de leurs parents à liqueurs.
Donc, ma réponse à votre question:
est résolument pas. Vous ne devriez pas toujours ajouter
private
parce qu'en le faisant vous défaite la fin d'un mot, car il n'est plus de signaux de toute intention, si vous le mettez partout: Vous pourriez aussi bien ne pas le mettre n'importe où.@drewmoore fournit une bonne réponse en privé/public se résume à l'intention. Mais il y a un peu plus de choses à considérer lors de l'utilisation injecté valeurs privées:
@Import() private foo
, ouconstructor(private foo) {}
, et de n'utiliserfoo
dans votre modèle