Angularjs 将子指令从模板移动到编译fn会中断作用域连接

Angularjs 将子指令从模板移动到编译fn会中断作用域连接,angularjs,angularjs-directive,angularjs-scope,Angularjs,Angularjs Directive,Angularjs Scope,我有嵌套指令,它们都创建了新的作用域。为了保留原始内容,我决定将子指令移动到父指令的编译函数中。这一举动打破了示波器之间的连接,有人能解释一下原因吗?谢谢 JSFIDLE:(从父指令中删除模板以查看问题) var myApp=angular.module('myApp',[]) .directive('parent',function directive(){ 返回{ 编译:函数(elm){ elm.append(“追加”); }, 模板:“来自模板”, 作用域:{}, 控制器:功能($sco

我有嵌套指令,它们都创建了新的作用域。为了保留原始内容,我决定将子指令移动到父指令的编译函数中。这一举动打破了示波器之间的连接,有人能解释一下原因吗?谢谢

JSFIDLE:(从父指令中删除模板以查看问题)

var myApp=angular.module('myApp',[])
.directive('parent',function directive(){
返回{
编译:函数(elm){
elm.append(“
追加”); }, 模板:“
来自模板”, 作用域:{}, 控制器:功能($scope){ $scope.who=“家长”; $scope.message=“文本消息”; //console.log($scope); } }; }).directive('child',function directive(){ 返回{ 替换:正确, 作用域:{}, 模板:{{$parent.message | |“NO message!”}的子级, 控制器:功能($scope){ $scope.who=“child”; //console.log($scope); } }; });
问题 根据中的:

[…]只有指令模板中的元素将绑定到 由该指令创建的隔离作用域。如果你不使用 template—声明指令的元素的内容, 将绑定,就像不存在隔离作用域一样

以下是使用模板时范围层次结构的外观:

。。。下面是没有它的情况:

解决办法 使用
transclusion
将视图中的元素注入到
parent
中,而不使用
compile

.directive('parent', function directive() {
  return {
      transclude: true,
      template:"</br><div ng-transclude></div>From template <div child></div>",
      scope: {},
      controller: function ($scope) {
          $scope.who = "parent";
          $scope.message = "Text message";
      }
  };
})
.directive('parent',function directive(){
返回{
是的,
模板:“
来自模板”, 作用域:{}, 控制器:功能($scope){ $scope.who=“家长”; $scope.message=“文本消息”; } }; })

这里的
子指令
又是
父指令
的实际子指令。还请注意,转包的内容出现在另一个作用域中,该作用域是父级的隔离作用域的同级:


我对这种转换有问题,因为我想保留原始内容。类似:内容>>从模板变成>>内容元素。有什么简单的方法可以做到这一点吗?:)我看不出这不是通过转换而实现的。你能更新一下你的问题吗?对不起,我没有把评论写清楚。转换后,原始内容被放置在内容中。我需要这些元素吗?或者我可以绕过他们。我想知道指令链接函数中的转换函数,但我不认为这可以做到这一点。希望我现在更清楚:)是的,如果您想避免在指令模板中使用
ng transclude
,您可以在链接函数()中手动插入克隆内容。感谢这是最终可接受的解决方案,非常感谢您的支持,非常感谢您的时间;)
.directive('parent', function directive() {
  return {
      transclude: true,
      template:"</br><div ng-transclude></div>From template <div child></div>",
      scope: {},
      controller: function ($scope) {
          $scope.who = "parent";
          $scope.message = "Text message";
      }
  };
})