在配置块外使用 angular compileProvider
Use angular compileProvider outside config block
我正在尝试动态创建指令,实际上我做到了,但接缝很老套。
这是我的第一个方法:
function create(myDir) {
angular.module("app").directive(myDir.name, function() {
return {
template:myDir.template
};
});
}
它没有工作,因为你不能在应用程序启动后注册指令。
基于此post:http://weblogs.thinktecture.com/pawel/2014/07/angularjs-dynamic-directives.html
我发现我可以使用 compileProvider 来完成这项工作,但是由于 compileProvider 在配置块之外不可用,你需要把它放出来,所以我做了:
var provider = {};
angular.module("app",[]);
angular.module('app')
.config(function ($compileProvider) {
//It feels hacky to me too.
angular.copy($compileProvider, provider);
});
....
function create(myDir) {
provider.directive.apply(null, [myDir.name, function () {
return { template: myDir.template } }]);
render(myDir); //This render a new instance of my new directive
}
令人惊讶的是它起作用了。但是我不想 hacking compileProvider,因为我没有按照预期的方式使用它,我会真的很想知道在应用程序启动后是否可以正确使用 compileProvider。
有一个依赖项列表可以注入 config
块(这些是内置的 $provide
、$injector
和所有服务提供者)和一个依赖项列表可以注入到其他任何地方(服务实例和旧 $injector
)。如您所见,constant
所做的只是 adding the dependency to both lists.
在 config
之外使用提供商的一个常见方法是
app.config(function ($provide, $compileProvider) {
$provide.constant('$compileProvider', $compileProvider);
});
我正在尝试动态创建指令,实际上我做到了,但接缝很老套。
这是我的第一个方法:
function create(myDir) {
angular.module("app").directive(myDir.name, function() {
return {
template:myDir.template
};
});
}
它没有工作,因为你不能在应用程序启动后注册指令。
基于此post:http://weblogs.thinktecture.com/pawel/2014/07/angularjs-dynamic-directives.html
我发现我可以使用 compileProvider 来完成这项工作,但是由于 compileProvider 在配置块之外不可用,你需要把它放出来,所以我做了:
var provider = {};
angular.module("app",[]);
angular.module('app')
.config(function ($compileProvider) {
//It feels hacky to me too.
angular.copy($compileProvider, provider);
});
....
function create(myDir) {
provider.directive.apply(null, [myDir.name, function () {
return { template: myDir.template } }]);
render(myDir); //This render a new instance of my new directive
}
令人惊讶的是它起作用了。但是我不想 hacking compileProvider,因为我没有按照预期的方式使用它,我会真的很想知道在应用程序启动后是否可以正确使用 compileProvider。
有一个依赖项列表可以注入 config
块(这些是内置的 $provide
、$injector
和所有服务提供者)和一个依赖项列表可以注入到其他任何地方(服务实例和旧 $injector
)。如您所见,constant
所做的只是 adding the dependency to both lists.
在 config
之外使用提供商的一个常见方法是
app.config(function ($provide, $compileProvider) {
$provide.constant('$compileProvider', $compileProvider);
});