当前位置: 首页 > 面试题库 >

我可以获取Angular元素的已编译html吗?

孙鑫鹏
2023-03-14
问题内容

我已经使用$
compile服务编译了一个元素。如果我直接将其添加到DOM,它看起来很棒,并且所有绑定都是正确的。如果我希望该元素为字符串,则显示{{stuffHere}}而不是绑定。有没有一种方法可以在元素编译后获取其html?

$templateCache.put('template', '<div><div><div><span>content is {{content}}</span></div></div>   </div>');

$scope.content = 'Hello, World!';

var el = $compile($templateCache.get('template'))($scope);
$('body').append(el);

alert(el.html());

http://plnkr.co/edit/1sxvuyUZKbse862PieBa?p=preview

附加到主体的元素显示 content is Hello, World!

警报显示 <div><div><span ng-binding>{{content}}</span></div></div>

我想从警报中看到的是 <div><div><span ng-binding>Hello World</span></div></div>


问题答案:

问题是您太早阅读了元素的内容。如果将a添加$timeout到您的阅读中,它将是正确的:

angular.module('demo', []);
angular.module('demo').controller('PopoverDemoCtrl', function($scope, $timeout, $compile, $templateCache) {
  $templateCache.put('template', '<div><div><div><span>content is {{content}}</span></div></div></div>');

  $scope.content = 'Hello, World!';

  var el = $compile($templateCache.get('template'))($scope);
  $('body').append(el);
  $timeout(function() {
    console.log(el.html());
  }, 300);   // wait for a short while
});

更新的柱塞

为什么$timeout需要?

$compile调用该方法后,它不会立即生效。这是由于$digest循环造成的,因为它使用循环,$scope因此需要运行$digest循环以查看是否有任何影响$scope.content。这就是为什么必须设置a的原因$timeout,需要等到$digest循环完成后才能真正更改元素的内容。您可以在这里阅读更多有关这一切如何联系的信息。



 类似资料:
  • 问题内容: 我正在寻找可以集中注意力的HTML元素的最终列表,即在调用它们时哪些元素将成为焦点? 我正在编写一个jQuery扩展,该扩展适用于可以引起关注的元素。我希望这个问题的答案能使我具体说明我要针对的要素。 问题答案: 没有明确的列表,取决于浏览器。我们拥有的唯一标准是DOM Level 2 HTML,根据该标准,具有方法的唯一元素是HTMLInputElement,HTMLSelectEl

  • 问题内容: 我希望获得选定元素的整个html,而不仅仅是它的内容。.html()根据文档使用javascripts innerHTML()方法。HTML: 使用将仅返回段落元素。我想获取整个元素的html,如下所示: 我不能使用.parent,因为这将返回两个子div的html。 问题答案: 您可以克隆它以获取全部内容,如下所示: 或使其成为一个插件,通常倾向于将其称为“ outerHTML”,如

  • 问题内容: 我了解ID在HTML / XHTML页面内必须唯一。 我的问题是,对于给定的元素,我可以为其分配多个ID吗? 我意识到我只需使用一个类就可以轻松解决问题。我只是好奇以这种方式使用id。 问题答案: 否。根据XHTML 1.0规范 在XML中,片段标识符的类型为ID,每个元素只能有一个类型为ID的属性。因此,在XHTML 1.0中,将id属性定义为ID类型。为了确保XHTML 1.0文档

  • 问题内容: 命令可以运行已编译的Scala代码吗?如果是这样,我们为什么要使用排他命令? 问题答案: 如果您在类路径中包含了Scala的所有必要运行时库(scala-library.jar,scala-swing.jar …),则可以运行Scala生成的字节代码。scala命令自动执行此操作,并支持特定于Scala的命令行参数。

  • 问题内容: 如何使用JavaScript 获取任何元素(例如)的背景颜色?我努力了: 问题答案: 与所有包含连字符的css属性一样,它们在JS中的对应名称是删除连字符并使用以下字母大写:

  • 问题内容: 我正在尝试将for循环转换为功能代码。我需要展望一种价值,也要展望一种价值。可以使用流吗?以下代码将罗马文本转换为数字值。不确定带有两个/三个参数的reduce方法是否可以在这里提供帮助。 问题答案: 不,至少在流中使用流是不可能的。流API从处理元素的顺序中抽象出来:流可以并行或以相反顺序处理。因此,流抽象中不存在“下一个元素”和“上一个元素”。 您应该使用最适合此工作的API:如果