Angularjs 将子指令从模板移动到编译fn会中断作用域连接
我有嵌套指令,它们都创建了新的作用域。为了保留原始内容,我决定将子指令移动到父指令的编译函数中。这一举动打破了示波器之间的连接,有人能解释一下原因吗?谢谢 JSFIDLE:(从父指令中删除模板以查看问题)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
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";
}
};
})