Javascript $compile未编译html字符串-angularJs

Javascript $compile未编译html字符串-angularJs,javascript,angularjs,Javascript,Angularjs,我正在尝试编译一些原始html,其中包含范围内属性的angular指令,但它并没有按预期工作。 下面是我在控制台的断点上运行的简单代码的快照 $scope.scopeString=“scope string value”; “作用域字符串值” $scope.scopeArray=[1,2,3] (3) [1, 2, 3] $compile(`{scopeString}}`)($scope.prop('outerHTML')) “{{scopeString}}” $compile(`{item}

我正在尝试编译一些原始html,其中包含范围内属性的angular指令,但它并没有按预期工作。 下面是我在控制台的断点上运行的简单代码的快照

$scope.scopeString=“scope string value”;
“作用域字符串值”
$scope.scopeArray=[1,2,3]
(3) [1, 2, 3]
$compile(`{scopeString}}`)($scope.prop('outerHTML'))
“{{scopeString}}”
$compile(`{item}}`)($scope.prop('outerHTML'))
""

谁知道我做错了什么吗?

范围绑定是在摘要周期上计算的。立即从元素中检索HTML不会给它留下插入绑定的机会

当代码在摘要周期内执行时(例如控制器),可以

var $el = $compile(`<div>{{scopeString}}</div>`)($scope);
$timeout(() => {
  console.log($el.prop('outerHTML'))
});
var$el=$compile(`{scopeString}}}`)($scope);
$timeout(()=>{
console.log($el.prop('outerHTML'))
});
当它在摘要之外执行时,它是

var $el = $compile(`<div>{{scopeString}}</div>`)($scope);
$scope.$apply();
console.log($el.prop('outerHTML'))
var$el=$compile(`{scopeString}}}`)($scope);
$scope.$apply();
console.log($el.prop('outerHTML'))

对“$compile(
{{scopeString}}
)($scope.prop('outerHTML')”的解释是什么?您能添加更多信息吗,不清楚我在现有的摘要周期(即控制器)中这样做,但我不明白为什么我必须让当前周期完成才能获得编译后的html。我在文档中也找不到对此的解释。因为表达式将在当前摘要的某个时间点进行计算,但您需要等到现在。这也可以通过为此目的而存在的$$postDigest钩子来完成($$表示它没有文档化,您应该知道您在做什么):
$scope.$$postDigest(()=>{console.log($el.prop('outerHTML'))}
$compile definition-
将HTML字符串或DOM编译成模板并生成模板函数,然后可以使用它将作用域和模板链接在一起。
我认为使用作用域调用$compile返回的模板函数将返回最终编译的html。至少这个定义似乎暗示了这一点。无论如何,非常感谢你的帮助!!看起来,它返回的HTML元素将很快用插值填充(在摘要期间)。不客气。
var $el = $compile(`<div>{{scopeString}}</div>`)($scope);
$scope.$apply();
console.log($el.prop('outerHTML'))