我正在尝试使用TypeScript创建一个AngularJS指令.我的指令需要'ngModel',我也使用在我的指令中注入的自定义服务.我的主要问题是我的服务无法在我的链接功能中使用.
这是我想要实现的一个例子:
module app.directives {
export var directiveName: string = "theDirective";
angular.module("myApp").directive(directiveName,
(myFactory: app.services.MyFactory) =>
{
return new MyDirective(myFactory);
});
export interface IMyDirectiveScope extends ng.IScope {
ngModel: ng.INgModelController;
}
export class MyDirective implements ng.IDirective {
restrict = "A";
require = "ngModel";
scope = {
ngModel:'='
}
constructor(private myFactory: app.services.MyFactory) {
}
link(scope: IMyDirectiveScope , elem: JQuery, attributes: ng.IAttributes, ngModel: ng.INgModelController) {
//this is window here
elem.bind('blur', (evt: JQueryEventObject) => {
//keyword this is also window here, so yeah bummer indeed …Run Code Online (Sandbox Code Playgroud) 我正试图从指令访问服务,但无论我做什么,它们似乎都是未定义的.MyDirective.factory()在初始化指令时表示未定义.在构造函数中也未定义(毫不奇怪).
我试图做这些说明同样无效:
http://blog.aaronholmes.net/writing-angularjs-directives-as-typescript-classes/
http://sirarsalih.com/2014/08/04/ 使用TypeScript和$ inject机制正确依赖注入你的angularjs-typescript-apps/
定义AngularJS指令
这是app.ts:
angular.module("fooTest", [])
.service("myService", Foo.MyService)
.directive("myDirective", Foo.MyDirective.factory());
Run Code Online (Sandbox Code Playgroud)
MyDirective.ts:
module Foo {
'use strict';
export class MyDirective implements ng.IDirective {
private myService: any;
//static $inject = ['myService'];
constructor(service: MyService) {
this.myService = service;
}
restrict = "E";
replace = true;
template = "<div ng-click='fooClick()'>foo: {{foo}}</div>";
scope = {
foo: "="
};
link = (scope, element, attrs) => {
scope.fooClick = function () {
this.myService.foo();
scope.foo = this.myService.getBar();
}
};
static factory() …Run Code Online (Sandbox Code Playgroud)