Javascript 角度:带有父和子指令的模板

Javascript 角度:带有父和子指令的模板,javascript,angularjs,angularjs-directive,angularjs-scope,Javascript,Angularjs,Angularjs Directive,Angularjs Scope,我有一个简单的例子 代码: 标记: <parent-directive> <child-directive></child-directive> </parent-directive> 这正如预期的那样有效。我遇到的问题是理解为什么不能将模板添加到parentDirective并获得相同的结果。如果取消对template属性的注释,则绑定不会更改,并且不再触发警报。有人能简单地向我解释一下这里发生了什么事吗?也

我有一个简单的例子

代码:

标记:

    <parent-directive>
        <child-directive></child-directive>
    </parent-directive>


这正如预期的那样有效。我遇到的问题是理解为什么不能将模板添加到parentDirective并获得相同的结果。如果取消对template属性的注释,则绑定不会更改,并且不再触发警报。有人能简单地向我解释一下这里发生了什么事吗?也许能帮我充实我的例子?我通过示例了解:)

当您使用指令模板时,它会用模板替换指令内部内容,很可能是因为从未呈现内部指令

您需要在父模板中使用
ng transclude
,以在父指令模板中发出子指令html。在指令定义对象标记上

transclude:true,

template:“我的作业是{{job}}”

这来自
$compile
文档

替换指令元素的内容(默认)

替换指令的元素本身(如果Replace为true-已弃用)

包装指令元素的内容(如果transclude为true)


可以在父级上设置模板属性,并在模板内部使用child指令。理想情况下,它应该自动渲染

比如:

<parent-directive></parent-directive>
棱角的 .module('应用程序',[]) .directive('parentDirective',parentDirective) .指令(“儿童指令”,儿童指令)

函数parentDirective(){
返回{
限制:'E',
范围:正确,
模板:“{job}}被看到”
//模板:“我的作业是{{job}}”,
控制器:功能($scope){
$scope.job='trashman';
$scope.say=功能(作业){
$scope.job=作业;
警报($scope.job);
}
}
};
}
函数childDirective(){
返回{
限制:'E',
模板:“我将被渲染”,
链接:功能(范围){
范围。说(‘擦鞋男孩’);
}
};
}
现在,您可以在任何地方使用父指令,它也将在其中呈现子指令

比如:

<parent-directive></parent-directive>


Angular现在将看到它是这样的,找到父指令,呈现它,在它里面是一个使用的子指令,呈现子指令的html。

这是真的,但您需要使用手动转置来正确设置范围-否则
$scope。假设
将不在
childDirective
的范围内,我相信一段内容的默认范围是原始范围,而不是指令范围。
<parent-directive></parent-directive>