ngTransclude in AngularJS

时间:2014-03-01 04:39:48

标签: javascript angularjs

我是AngularJS的新手,在学习阶段,我遇到了ngTransclude,当我开始阅读文档http://docs.angularjs.org/api/ng/directive/ngTransclude时,我能够得到,真正做到的,

你们中的任何一个人,请告诉我实际上ngTransclude的作用,以及包含它时的变化是什么,何时它不包含在指令中。

请让我清楚地了解ngTransclude,重要性以及何时可以使用它。

1 个答案:

答案 0 :(得分:1)

我只想看到它工作:

http://plnkr.co/edit/liRDIEy9sWoSPSHJ1oln?p=preview

示例说明

将“ngTransclude”视为“保留元素内部的任何内容,即使在我重写之后”。它最常用于指令。以下面的例子为例,我定义了一个指令“emphasisize-text”,它实际上只是包装了我在“h1”元素中提供的内容。以下是该指令:

app.directive("emphasizeText", function () {
  return {
    restrict: 'E',
    transclude: true,
    template: '<h1 ng-transclude></h1>',
  }
});

现在,要在页面上使用它,以下html将运行良好:

<!-- transclude will keep text of course -->
<emphasize-text>Example With Just Text</emphasize-text>

<!-- transclude also keep html tags intact -->
<emphasize-text><i>Example With Italics Tag</i></emphasize-text>

<!-- translcude will even keep angular variables intact!  -->
<emphasize-text>
  <div>This is a first div</div>
  <div>This is a {{secondVariable}} div</div>
</emphasize-text>

如果你看看这个羽毛球(http://plnkr.co/edit/liRDIEy9sWoSPSHJ1oln?p=preview)。在输出中使用现代浏览器和“查看源代码”,您将看到正在发生的事情。标签保持精确,角度只是包装在“h1”!完全是我们想要的!

这里的关键是你可以在html中修改你想要的语义,行为或任何东西!就个人而言,我觉得这最适合自定义控件 - 不像我用它那样简单。事实上,我的例子可能是一个非常糟糕的例子,因为未来的程序员会知道“h1”比他们知道“强调文本”会变成什么要快得多。那就是说,你明白了。

快乐定制!