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>