指令からコントローラ関数を呼び出そうとしていて、 "this"コンテキストの問題が発生します。 logSerivceは、関数が指令経由で呼び出されるとアクセスできません。via typescriptとしてAngularjsコントローラが指令からコントローラ関数を呼び出す
ここでは、コントローラクラス:
class MainController implements IMainScope {
static $inject = ["LogService"];
constructor(private logService:ILogService) { }
sayHello(message:string) {
console.log("MainController sayHello", message);
// Cannot read property 'logService' of undefined if gets call from directive
this.logService.log(message);
}
}
ここでディレクティブクラス:
class TestDirective implements ng.IDirective {
public restrict = "E";
public templateUrl = "test-directive.html";
public replace = true;
public scope:any = {
testFn: "&"
};
constructor() { }
public link:ng.IDirectiveLinkFn = (scope:TestDirectiveScope, element:ng.IAugmentedJQuery, attrs:ng.IAttributes):void => {
scope.hello =() => {
console.log("TestDirective", scope.firstName);
scope.testFn()(scope.firstName);
};
}
static factory():ng.IDirectiveFactory {
let directive:ng.IDirectiveFactory =() => new TestDirective();
return directive;
}
}
ここでは私の問題をカバーして、簡単なplunkerの例である:あなたがtestFn
を呼び出しているhttp://embed.plnkr.co/Ov7crFZkkjDPzilX2BmL/
ありがとう!できます!!残念ながら、デモリンクには更新バージョンが表示されません。私は呼び出しを変更しました: 'test-directive test-fn =" vm.sayHello(message) "'と指示文の呼び出し。 'scope.testFn({message:scope.firstName});' [これは新しいデモ版です](https://embed.plnkr.co/nd54cRZqMDtnVM4XXhog/)です。もう一度ありがとう! – stevo
@stevo完全に更新するのを忘れました;)ありがとう –
最初のコードを 'fn =" vm.sayHello(message) 'で更新したいかもしれません。 – stevo