我正在尝试编写将给定模板和作用域呈现为字符串的服务。
这是代码:
utilModule.factory('CompilerService', ['$compile', '$templateCache',
function ($compile, $templateCache) {
return {
renderTemplateToString: function(templateName, scope) {
var template = $templateCache.get(templateName);
var linkFn = $compile(template);
var linkedContent = linkFn(scope);
scope.$apply();
return linkedContent.html();
}
}
}]);
但是,当我调用此函数时,由于调用$ apply()导致出现 Angular InProg错误:
https://docs.angularjs.org/error/$rootScope/inprog
我在调用$ apply()以便在检索html之前在模板内替换变量。
关于如何在没有InProg错误的情况下实现此目标的任何想法?
最佳答案
您有两种选择:
if ( !scope.$$phase )
scope.$apply();
这是检查代码是否在$ digest周期内执行。
但是,首选
$timeout
:$timeout( function(){
var template = $templateCache.get(templateName);
var linkFn = $compile(template);
var linkedContent = linkFn(scope);
}, 0)
编辑:要使用前提,您应该执行以下操作:
renderTemplateToString: function(templateName, scope) {
var deferred = $q.defer();
$timeout(function(){
var template = $templateCache.get(templateName);
var linkFn = $compile(template);
var linkedContent = linkFn(scope);
scope.$apply();
deferred.resolve( linkedContent.html() );
}, 0);
return deferred.promise;
}
$ timeout在执行之前等待
$digest
完成关于javascript - 如何在不引起InProg错误的情况下将AngularJS模板呈现为字符串?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27035690/