TypeScript
TypeScript avec AngularJS
Recherche…
Paramètres
prénom | La description |
---|---|
controllerAs | est un nom d'alias auquel des variables ou des fonctions peuvent être affectées. @voir: https://docs.angularjs.org/guide/directive |
$inject | Dépendances Liste d'injection, elle est résolue par angulaire et en passant en argument aux fonctions constantes. |
Remarques
Lors de l'exécution de la directive dans TypeScript, gardez à l'esprit la puissance de ce langage de type personnalisé et des interfaces que vous pouvez créer. Ceci est extrêmement utile pour développer des applications énormes. La complétion de code supportée par de nombreux IDE vous montrera la valeur possible par type correspondant avec lequel vous travaillez, donc il y a beaucoup moins de choses à garder à l'esprit (comparé à VanillaJS).
"Code contre interfaces, pas implémentations"
Directif
interface IMyDirectiveController { // specify exposed controller methods and properties here getUrl(): string; } class MyDirectiveController implements IMyDirectiveController { // Inner injections, per each directive public static $inject = ["$location", "toaster"]; constructor(private $location: ng.ILocationService, private toaster: any) { // $location and toaster are now properties of the controller } public getUrl(): string { return this.$location.url(); // utilize $location to retrieve the URL } } /* * Outer injections, for run once controll. * For example we have all templates in one value, and we wan't to use it. */ export function myDirective(templatesUrl: ITemplates): ng.IDirective { return { controller: MyDirectiveController, controllerAs: "vm", link: (scope: ng.IScope, element: ng.IAugmentedJQuery, attributes: ng.IAttributes, controller: IMyDirectiveController): void => { let url = controller.getUrl(); element.text("Current URL: " + url); }, replace: true, require: "ngModel", restrict: "A", templateUrl: templatesUrl.myDirective, }; } myDirective.$inject = [ Templates.prototype.slug, ]; // Using slug naming across the projects simplifies change of the directive name myDirective.prototype.slug = "myDirective"; // You can place this in some bootstrap file, or have them at the same file angular.module("myApp"). directive(myDirective.prototype.slug, myDirective);
Exemple simple
export function myDirective($location: ng.ILocationService): ng.IDirective {
return {
link: (scope: ng.IScope,
element: ng.IAugmentedJQuery,
attributes: ng.IAttributes): void => {
element.text("Current URL: " + $location.url());
},
replace: true,
require: "ngModel",
restrict: "A",
templateUrl: templatesUrl.myDirective,
};
}
// Using slug naming across the projects simplifies change of the directive name
myDirective.prototype.slug = "myDirective";
// You can place this in some bootstrap file, or have them at the same file
angular.module("myApp").
directive(myDirective.prototype.slug, [
Templates.prototype.slug,
myDirective
]);
Composant
Pour faciliter la transition vers Angular 2, il est recommandé d'utiliser Component
, disponible depuis Angular 1.5.8.
myModule.ts
import { MyModuleComponent } from "./components/myModuleComponent";
import { MyModuleService } from "./services/MyModuleService";
angular
.module("myModule", [])
.component("myModuleComponent", new MyModuleComponent())
.service("myModuleService", MyModuleService);
composants / myModuleComponent.ts
import IComponentOptions = angular.IComponentOptions;
import IControllerConstructor = angular.IControllerConstructor;
import Injectable = angular.Injectable;
import { MyModuleController } from "../controller/MyModuleController";
export class MyModuleComponent implements IComponentOptions {
public templateUrl: string = "./app/myModule/templates/myComponentTemplate.html";
public controller: Injectable<IControllerConstructor> = MyModuleController;
public bindings: {[boundProperty: string]: string} = {};
}
templates / myModuleComponent.html
<div class="my-module-component">
{{$ctrl.someContent}}
</div>
contrôleur / MyModuleController.ts
import IController = angular.IController;
import { MyModuleService } from "../services/MyModuleService";
export class MyModuleController implements IController {
public static readonly $inject: string[] = ["$element", "myModuleService"];
public someContent: string = "Hello World";
constructor($element: JQuery, private myModuleService: MyModuleService) {
console.log("element", $element);
}
public doSomething(): void {
// implementation..
}
}
services / MyModuleService.ts
export class MyModuleService {
public static readonly $inject: string[] = [];
constructor() {
}
public doSomething(): void {
// do something
}
}
quelque part.html
<my-module-component></my-module-component>