TypeScript
TypeScript met AngularJS
Zoeken…
parameters
Naam | Beschrijving |
---|---|
controllerAs | is een aliasnaam waaraan variabelen of functies kunnen worden toegewezen. @see: https://docs.angularjs.org/guide/directive |
$inject | Afhankelijkheid Injectie lijst, het wordt opgelost door hoekige en doorgeven als een argument voor constuctor functies. |
Opmerkingen
Houd bij het uitvoeren van de richtlijn in TypeScript rekening met de kracht van deze taal van aangepast type en interfaces die u kunt maken. Dit is zeer nuttig bij het ontwikkelen van grote applicaties. Code-aanvulling ondersteund door veel IDE zal u de mogelijke waarde laten zien per overeenkomstig type waarmee u werkt, dus er is veel meer dat in gedachten moet worden gehouden (vergeleken met VanillaJS).
"Code tegen interfaces, geen implementaties"
Richtlijn
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);
Eenvoudig voorbeeld
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
]);
bestanddeel
Voor een gemakkelijkere overgang naar Angular 2 wordt het aanbevolen om Component
te gebruiken, beschikbaar sinds 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);
componenten / 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>
controller / 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..
}
}
diensten / MyModuleService.ts
export class MyModuleService {
public static readonly $inject: string[] = [];
constructor() {
}
public doSomething(): void {
// do something
}
}
somewhere.html
<my-module-component></my-module-component>