Max*_*ket 2 javascript angularjs typescript angularjs-directive angular-directive
Stack: Typescript 1.7 + Angular 1.49
摘要:
我有一个指令.我想要$inject棱角分明的$timeout服务.它在指令的控制器功能中工作正常,但在链接功能中没有.我错过了什么?
问题:
$inject的$timeout依赖方式?$timeout服务在指令的控制器中工作而不是链接?MyDirective.ts:
module app.directives {
export class MyDirective {
priority = 0;
restrict = 'E';
templateUrl = 'template.html';
scope = {
'items': '='
};
controller = MyController;
link = MyLink;
static $inject = ['$timeout'];
constructor(private $timeout:ng.ITimeoutService) {
}
}
function MyController($scope:ng.IScope, $timeout:ng.ITimeoutService) {
console.log("controller", $timeout); // function timeout(fn,delay,invokeApply){ the guts here }
$timeout(function () {
console.log("This works fine");
},3000);
}
function MyLink(scope:ng.IScope, element:ng.IAugmentedJQuery, attr:ng.IAttributes, $timeout:ng.ITimeoutService) {
console.log("link to", $timeout); // MyController {}
$timeout(function () {
console.log("This throws the error, TypeError: $timeout is not a function");
},3000);
}
}
Run Code Online (Sandbox Code Playgroud)
在directives.ts中连接它:
module app.directives {
angular.module('app').directive('MyDirective',['$timeout',($timeout:ng.ITimeoutService) => new MyDirective($timeout) ]);
}
Run Code Online (Sandbox Code Playgroud)
app.ts
module app {
angular.module('app', []);
}
Run Code Online (Sandbox Code Playgroud)
什么没用:
this.$timeout在MyLink中使用,包含或不包含$timeout参数.最后的笔记
链接函数不是直接从指令实例执行的,因此您不会获得this指令的配置实例(通过new运算符实例化).此外,您不能向链接函数注入任何内容(即指令构造函数用于),与控制器构造函数不同,链接函数的参数由指令执行逻辑自动传入.您可以使用箭头运算符来解决此问题.
例:
export class MyDirective {
priority = 0;
restrict = 'E';
templateUrl = 'template.html';
scope = {
'items': '='
};
controller = MyController;
link:ng.IDirectiveLinkFn = (scope:ng.IScope, element:ng.IAugmentedJQuery, attr:ng.IAttributes) => {
//Here
this.$timeout(function () {
},3000);
};
constructor(private $timeout:ng.ITimeoutService) {
}
}
Run Code Online (Sandbox Code Playgroud)
或者您可以使用function.bind绑定上下文.即link = MyLink;访问$timeout使用this.$timeout.
如果interseted你可以看看通过实验装饰的指令创造了一些语法糖或者你可以尝试探索一些这样的.然而(只是我的意见)使用类指令配置似乎是一种矫枉过正,你可能只是使用静态注入的函数.
| 归档时间: |
|
| 查看次数: |
4198 次 |
| 最近记录: |