在Module.Config()之前调用AngularJS指令

时间:2015-05-06 10:04:32

标签: angularjs angularjs-directive typescript1.4

我有一个非常特殊的场景,我无法确定原因。

我的情况简要概述:

我正在开发一个小应用程序,作为我学习TypeScript的一部分,并且使用AngularJS似乎是一个挑战几乎每个TS系统面临的新人,所以为什么不呢。

我有一个app.ts文件,它基本上设置了所需的全局变量并初始化了数据-ng-app ="" AngularJS要求的部分。

app.ts文件:

module Learning.AngularTS.Core
{
    "use strict";

    // ... environmental variables left out

    export var AngularTSApp: ng.IModule = angular.module("angularTSApp", []);
    export var ngCompileProvider: ng.ICompileProvider = null;

    AngularTSApp.config(function (
        $compileProvider: ng.ICompileProvider,
        $controllerProvider: ng.IControllerProvider): void
    {
        (<any>$controllerProvider).allowGlobals();
        ngCompileProvider = $compileProvider;
    });
}

没什么特别的,一个模块只是创建了一个&#39;命名空间&#39;对我来说,在这里我导出一些变量,但感兴趣的是AngularTSApp变量,它需要它的配置属性集。

在.config()中,根据我发布的代码,我将对Angular的CompileProvider的引用附加到变量ngCompileProvider。

我遇到的特殊问题是,当我尝试将指令附加到页面时,.config()仅在指令后调用,并且我不知道为什么。

指令:

module Learning.AngularTS.Directives
{
    "use strict";

    Learning.AngularTS.Core.ngCompileProvider.directive.apply(null,
        ["MyTestDirective",
            ["$parse", "$compile",
                function ($parse: ng.IParseService,
                    $compile: ng.ICompileService): ng.IDirective
                {
                    return <ng.IDirective>{
                        restrict: "E",
                        replace: false,
                        transclude: true,
                        templateUrl: "",
                        scope: {
                            value: "=",
                            edit: "@"
                        },
                        link: function ($scope: any, $rootElement: ng.IRootElementService, $attributes: ng.IAttributes): any
                        {
                            return null;
                        }
                    }
                }]]);
}

在面值上,这看起来很好,当JS文件加载时,Learning.AngularTS.Core.ngCompileProvider为空,因为它尚未根据app.ts中的.config()部分进行初始化。

我的方法是否有问题,如果是,有更好的方法吗?

0 个答案:

没有答案