
MCP Server : Implémenter un serveur Model Context Protocol en TypeScript
Découvrez comment créer un serveur MCP en TypeScript à l'aide du SDK officiel. Apprenez à fournir un contexte riche aux LLMs.
Sommaire
Pour faire simple une directive est un marqueur sur un élément du DOM (en tant qu'attribut, nom d’élément commentaire ou de classe CSS), ce marqueur informe le compiler HTML ($compile) d'attacher un comportement à cet élément voir de transformer cet élément et ses enfants.
A mon sens un des gros plus du framework AngularJS réside dans le fait que tout son langage de Template (directive, filtre, ...) est implémenté de la même manière que ce que nous allons voir ci-dessous. Les sources sont accessibles ici : https://github.com/angular/angular.js/tree/master/src/ng
Tout d'abord nous suivrons une convention de nommage qui veut qu'on préfixe le nom de ses propres directives, dans nos exemples ci-dessous nous utiliserons le préfixe "my".
Lors de cet article nous étudierons les options les plus communes des directives, deux autres articles compléteront le tour d'horizon des directives.
Une première étape sera de créer une simple directive chargée d'afficher "Hello Directive"
angular.module('exemple', [])
.directive('myDirective', function() {
return {
template: 'Hello Directive',
// une autre solution serait de cibler un template html
// templateUrl: 'my-template.html',
}
});
<div my-directive></div>
Par défaut le seul moyen d'afficher une directive est de l'utiliser via un attribut
.
Si cela ne convient pas à votre usage il faudra passer par l'option restrict.
L'option restrict
permet de définir le marqueur auquel réagira le compilateur, elle peut valoir :
A
: un attributE
: un élémentC
: une classeM
: un commentaireCes restrictions sont combinables.
AEC
: le marqueur peut être un attribut, un élément ou une classe.// attribut <div my-directive></div> // élément <my-directive></my-directive> // classe <div class="my-directive"> // commentaire <!-- directive:my-directive -->
L'usage veut que la déclaration via commentaire ne soit jamais utilisée.
La déclaration via élément est privilégiée dans le cas de création de directive complexe de type widget/composant.
La déclaration par classe ou attribut quand à elle convient parfaitement à un comportement simple, un gestionnaire de rebond par exemple.
Une directive peut avoir pour but d'être réutilisée plusieurs fois sur la même page, ce genre de problématique, entre
autre, nous amène à nous intéresser à l'option scope
.
L'option scope
peut avoir 3 types de valeurs :
false
: ne rien faire vis à vis du scope, c'est la valeur par défaut.true
: créé un scope enfant.{...}
: mettre un objet javascript créé un scope isolé.
Rassurez vous le principe de scope en Angular est très proche de celle de Javascript.
Le scope enfant
ainsi que le scope isolé
dispose d'un accès au scope parent
via sa propriété
$parent
.
La grosse différence entre ces deux types de scope
est la gestion de l'héritage
, ainsi seul un
scope enfant
hérite via son prototype des données de son scope parent
, il est donc inutile d'aller
chercher les informations via $parent
, à l'inverse d'un scope isolé
.
Pour définir un scope isolé
il est necessaire de binder
ses propriétés :
@
: pour un attribut texte.=
: pour une expression (valeur en two way binding).&
: pour une expression déclenchant une action.Afin de définir une propriété du scope isolé
on fait précéder le nom de l'attribut par le signe adéquat.
Si le nom de la propriété est identique au nom de l'attribut, on peut également se contenter de son signe.
angular.module('exemple', [])
.directive('myAstraunote', function() {
return {
restrict: 'E',
scope: {
name: '@',
expression: '=',
fn: '&action',
},
}
});
<my-directive name='wiston' expression='user.mission' action='launch(user)'></my-directive>
Dans le prochain opus, controller, compile, link et transclude !
Auteur(s)
Denis Schneider
Vous souhaitez en savoir plus sur le sujet ?
Organisons un échange !
Notre équipe d'experts répond à toutes vos questions.
Nous contacterDécouvrez nos autres contenus dans le même thème
Découvrez comment créer un serveur MCP en TypeScript à l'aide du SDK officiel. Apprenez à fournir un contexte riche aux LLMs.
Découvrez comment créer un plugin ESLint en TypeScript avec la nouvelle configuration "flat config" et publiez-le sur npm.
Apprenez à concevoir une barre de recherche accessible pour le web, conforme RGAA. Bonnes pratiques, erreurs fréquentes à éviter et exemples concrets en HTML et React/MUI.