首页 > 代码库 > angular : direative : scope 指令scope和transclude的关系
angular : direative : scope 指令scope和transclude的关系
今天记入的是指令的scope和transclude关系
a 和 b 都是指令
<div a> <div b></div></div>
a transclude了b,b的$$prevSibling是a,而a的$$prevSibling不是b
<div a> <div ng-transclude=""> <div b></div> </div></div>
angular.module("Member", []). directive("a", [function () { return { restrict: "A", transclude : true, template :"<div ng-transclude></div>", link: function ($scope) { console.log("a"); console.log($scope); }, scope : true, } }]). directive("b", [function () { return { restrict: "A", link: function ($scope) { console.log("b"); console.log($scope); } } }])
问题来了:为什么使用ng-transclude会自动创建一个新的scope?而且是sibling?那我不会回答,但是如果我要继承指令a的scope该怎么办?
解决方案:https://github.com/angular/angular.js/issues/1809
angular.module("my").directive(‘myTransclude‘, function() { return { compile: function(tElement, tAttrs, transclude) { return function(scope, iElement, iAttrs) { transclude(scope.$new(), function(clone) { iElement.append(clone); }); }; } };});
那原本的ng-transclude替换成my-transclude就能解决sibling问题。
如果你需要指令b的scope不是自己的,你可以删除掉$new()
如果你需要指令a是隔离的,同时指令b的scope要是rootscope,你就用回ng-transclude吧~
angular : direative : scope 指令scope和transclude的关系
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。