繁体   English   中英

超越如何与隔离范围一起工作

[英]How transclude works with isolate scope

我已经编写了这段代码。

 var app = angular.module('plunker', []); app.controller('MainCtrl', function($scope) { $scope.name = 'World'; $scope.hobby='AngularJS'; }); app.directive('outputText',function(){ return { transclude: true, scope: {}, template: '<div ng-transclude></div>' } }); 
 <!DOCTYPE html> <html ng-app="plunker"> <head> <meta charset="utf-8" /> <title>AngularJS Plunker</title> <script>document.write('<base href="' + document.location + '" />');</script> <link rel="stylesheet" href="style.css" /> <script data-require="angular.js@1.2.x" src="http://code.angularjs.org/1.2.7/angular.js" data-semver="1.2.7"></script> <script src="app.js"></script> </head> <body ng-controller="MainCtrl"> <div output-text> <p>Hello {{name}}</p> </div> <div output-text> <p>I love {{hobby}}!!</p> </div> </body> </html> 

如您在上面看到的,我在我的指令中使用了隔离范围,其中隔离范围中没有名称属性。 但是它如何访问父作用域名称属性,因为我什至没有使用子作用域,或者我丢失了一些东西。

无论您是否使用隔离元素,被包含的元素始终绑定到父作用域。

这就是关于超越状态的文档

transclude

编译元素的内容并将其提供给指令。 通常与ngTransclude一起使用。 包含的优势在于,链接功能可以接收预先绑定到正确范围的包含功能。 在典型的设置中,小部件创建隔离范围,但是包含不是子对象,而是隔离范围的同级对象。 这使得小部件可以具有私有状态,并且可以将包含项绑定到父(预隔离)范围。

每个指令均已编译并链接到作用域。 包含在内的内容总是链接到指令的直接外部作用域(尽管,这可以通过使用transclude函数来覆盖-链接函数的第5个arg)。 在您的情况下,它是MainCtrl控制器的作用域。

如果您的指令位于ng-repeat内(或另一个创建子作用域的指令),则被包含的内容将与ng-repeat的子作用域链接在一起。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM