如何在模块配置中将templateUrl设置为受信任?

时间:2013-11-04 23:19:18

标签: angularjs

考虑代码(Angular 1.2 RC3):

main.config(['$routeProvider', '$sce', function($routeProvider, $sce) {
    $routeProvider.when('/', { templateUrl: $sce.trustAsResourceUrl('bla-bla.html'), controller: "App.Controllers.BlaBla" });
    $routeProvider.otherwise({ redirectTo: '/' });
}]);

它会引发异常,因为在配置期间不允许服务,我在这里使用“$ sce”(严格上下文转义)服务。

如何在“config”方法中使用SCE?这个问题的可能解决方案是什么?

1 个答案:

答案 0 :(得分:1)

Angular具有$sceProvider服务,在特权上下文中,指令和代码将绑定到$sce.getTrusted(context, value)的结果而不是直接绑定到值。

指令使用$sce.parseAs而不是$parse来监视属性绑定,后者在非常量文字后面执行$sce.getTrusted

远离我的想法:

  

配置块 - 在提供商注册和配置阶段执行。只有提供者和常量   可以注入配置块。这是为了防止   在服务完全之前意外实例化服务   构造

  

运行块 - 在创建注入器后执行并用于启动应用程序。只有实例和常量才可以   注入运行块。这是为了防止进一步的系统   在应用程序运行时配置。

所以,现在$ sceProvider是一个内置服务,你不能将自己的服务或内置服务(如$ http)注入config()。

改为使用run()