AngularJS包含示例教程
时间:2020-02-23 14:29:37 来源:igfitidea点击:
前面我们讨论了自定义指令,在本教程中,我们将讨论指令中的transclusion。
包含(transclusion)是指通过引用将一个文档的内容包含在另一文档中(维基百科)。
包含(transclusion)提供了一种将模板传递给指令并显示它的方法。
在先前的教程中,我们使用template属性显示所需的模板。
让我们看下面的示例,看看如果在指令元素内定义模板会发生什么。
在以下示例中,我们创建了一个名为myEmployee的指令,该指令显示模板。
app.js
var app = angular.module('mainApp', []); app.directive('myEmployee', function() { return { restrict: 'EA', scope:{}, //isolate scope. template: "<div>My First Directive.</div>" }; });
我们在index.html文件的my-employee指令中包含了一个元素。
app.js
<!DOCTYPE html> <html> <head lang="en"> <meta charset="utf-8"> <title>AngularJS Transclusion</title> </head> <body> <div ng-app="mainApp"> <my-employee> <div>Transcluded Element. This will not be displayed Since the transclude property is not enabled. </div> </my-employee> </div> </div> <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js"></script> <script type="text/javascript" src="app.js"></script> </body> </html>
您将在浏览器中看到以下输出。
不显示my-employee指令中的内容。
AngularJS提供tranclude属性以支持指令中的包含。
我们将在下面的部分中使用上述示例看到这一点。
指令示例中的包含
AngularJS提供了两个主要功能来支持包含。
第一个是在名为transclude的伪指令中使用的属性,并将其设置为true可启用转换;第二个是名为ng-transclude的伪指令,用于定义将外部内容放置在伪指令模板中的位置。
在下面的示例中,您可以看到这两个功能的使用。
我们已经修改了上面的示例以仅通过向myEmployee指令添加transclude属性并将其设置为true来支持包含。
app.js
var app = angular.module('mainApp', []); app.directive('myEmployee', function() { return { restrict: 'EA', scope:{}, //isolate scope. transclude:true, template: "<div ng-transclude></div><div>My First Directive.</div>" }; });
ng-transclude是指示伪指令的指令,该插入点标记了使用包含的最接近父指示的被隐含DOM的插入点。
我们传入指令的模板将用ng-transclude指令替换元素。
在此示例中,我们用有意义的div内容替换了没有任何内容的div元素。
app.js
<!DOCTYPE html> <html> <head lang="en"> <meta charset="utf-8"> <title>AngularJS Routing</title> </head> <body> <div ng-app="mainApp"> <my-employee> <div>Transcluded Element. Transclude property is enabled.</div> </my-employee> </div> </div> <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js"></script> <script type="text/javascript" src="app.js"></script> </body> </html>