在众多博客中,我已经读到,当角色获取引导时,所有控制器/指令应该在配置阶段注册到$ compileProvider实例,然后才能应用。
我尝试过这种方法并且无法实现这一点,考虑到我使用的是TypeScript 1.8和AngularJS 1.5。
对于app.ts,我做了一个基本的实现,然后将角度引导到文档上:
app.ts:
module playground.core
{
"use strict";
export let app: ng.IModule = angular.module("MyApp", []);
export let provider: ng.ICompileProvider = null;
app.config(($compileProvider: ng.ICompileProvider): void =>
{
console.info("config hit");
provider = $compileProvider;
});
angular.bootstrap(document, ["MyApp"]);
}
此时,配置(...)被命中,并且根据Angular的文档,提供程序实例被正确设置为我注入config(...)的$ compileProvider。
然后我有一个名为my-directive的指令,它应该只是在页面上显示一个粗体文本:
mydirective.ts:
module playground.directives
{
"use strict";
let load = (): void =>
{
if (playground.core && playground.core.provider)
{
core.provider.directive.apply(null, ["myDirective", ["$compile", ($compile: ng.ICompileService): ng.IDirective =>
{
return <ng.IDirective>{
template: "<strong>Bold</strong>"
};
}]]);
}
else
{
setTimeout(load);
}
};
load();
}
我有一个setTimeout,因为在点击mydirective.ts文件时,配置尚未结束,因此提供程序将为null。一旦完成,它是否成功注册了调用,但RETURN语句永远不会触发。
我尝试了很多这种方法的排列(必须是TypeScript),我无法让它工作。如果我将 core.provider.directive.apply(...)中的行更改为 core.app.directive.apply(...),那么它有效吗?
我完全被这个困扰了。