Javascript AngularJS:注入$timeout在指令中不可用

Javascript AngularJS:注入$timeout在指令中不可用,javascript,angularjs,angularjs-directive,ecmascript-6,angularjs-timeout,Javascript,Angularjs,Angularjs Directive,Ecmascript 6,Angularjs Timeout,我正在向以下指令中注入$timeout,但它没有定义 以下代码将未定义的打印到控制台并抛出TypeError:$timeout不是一个函数 我认为问题在于,你没有注入任何东西,你只是指定了一个参数$timeout,它就像一个可能被注入的服务的占位符。要修复此问题,请添加foo.$inject=['$timeout']到文件末尾,如下所示: export default class foo { constructor ($timeout) { 'ngInject';

我正在向以下指令中注入
$timeout
,但它没有定义

以下代码将未定义的打印到控制台并抛出TypeError:$timeout不是一个函数


我认为问题在于,你没有注入任何东西,你只是指定了一个参数
$timeout
,它就像一个可能被注入的服务的占位符。要修复此问题,请添加
foo.$inject=['$timeout']到文件末尾,如下所示:

export default class foo {
    constructor ($timeout) {
        'ngInject';
        this.restrict = 'A';
        this.scope = {};
        this.$timeout = $timeout;

        console.log( $timeout );
        $timeout( function() {
            alert('timeout');
        }, 0 );
    }

    link($scope, $element, $attrs, $ctrl) {      

    }

    // Create an instance so that we can access this inside link
    static factory() {
        foo.instance = new foo();
        return foo.instance;
    }
}

foo.$inject = ['$timeout'];
有几个例子也分别从类定义中进行注入

或者要通过静态工厂(正如您可能打算的那样),文件末尾将是
foo.factory.$inject=['$timeout']
,并且您还必须调整工厂函数,以便为您提供并传递注入的服务:

export default class foo {
    constructor ($timeout) {
        'ngInject';
        this.restrict = 'A';
        this.scope = {};
        this.$timeout = $timeout;

        console.log( $timeout );
        $timeout( function() {
            alert('timeout');
        }, 0 );
    }

    link($scope, $element, $attrs, $ctrl ) {      

    }

    // Create an instance so that we can access this inside link
    static factory($timeout) {
        foo.instance = new foo($timeout);
        return foo.instance;
    }
}

foo.factory.$inject = ['$timeout'];
export default class foo {
    constructor ($timeout) {
        'ngInject';
        this.restrict = 'A';
        this.scope = {};
        this.$timeout = $timeout;

        console.log( $timeout );
        $timeout( function() {
            alert('timeout');
        }, 0 );
    }

    link($scope, $element, $attrs, $ctrl ) {      

    }

    // Create an instance so that we can access this inside link
    static factory($timeout) {
        foo.instance = new foo($timeout);
        return foo.instance;
    }
}

foo.factory.$inject = ['$timeout'];