Angularjs 角度指令作用域问题
我现在对angular有一些经验,但我仍然无法理解。我有一个指令被另一个指令所屏蔽。Directive1与控制器位于同一元素上,并且它们共享相同的作用域。我希望directive2从controller中的作用域继承,但它们不是父/子,而是兄弟。我错过了什么 代码如下:Angularjs 角度指令作用域问题,angularjs,angularjs-directive,angularjs-scope,Angularjs,Angularjs Directive,Angularjs Scope,我现在对angular有一些经验,但我仍然无法理解。我有一个指令被另一个指令所屏蔽。Directive1与控制器位于同一元素上,并且它们共享相同的作用域。我希望directive2从controller中的作用域继承,但它们不是父/子,而是兄弟。我错过了什么 代码如下: angular.module('myModule',[]) .controller('controller',['$scope',function($scope){ log('from controller',$scope);
angular.module('myModule',[])
.controller('controller',['$scope',function($scope){
log('from controller',$scope);
}])
.directive('directive1',function(){
返回{
限制:“A”,
替换:正确,
是的,
模板:“directive1”
+' ',
链接:函数($scope、elem、attrs){
log('from directive1',$scope);
}
}
})
.directive('directive2',function(){
返回{
限制:“A”,
链接:函数($scope、elem、attrs){
log('from directive2',$scope);
}
}
});
关联的html:
<div x-directive1 ng-controller="Controller">
<div x-directive2> <p>directive2</p> </div>
</div>
指令2
以及指向JSFIDLE的链接:
我不会使用$scope作为这些链接函数的命名参数,而是使用'scope'。
这使控制器具有方向性,但我认为这不是你真正想要的。
你能不能把控制器移到一个封闭的div?那么directive2实际上将继承controllers范围
<div ng-controller="Controller">
<div x-directive1>
<div x-directive2> <p>directive2</p> </div>
</div>
</div>
指令2
我不会使用$scope作为这些链接函数的命名参数,而是使用'scope'。
这使控制器具有方向性,但我认为这不是你真正想要的。
你能不能把控制器移到一个封闭的div?那么directive2实际上将继承controllers范围
<div ng-controller="Controller">
<div x-directive1>
<div x-directive2> <p>directive2</p> </div>
</div>
</div>
指令2
问题在于将直接放在执行转换的父指令上。创建一个换行元素并将指令放置在该元素上
像这样:
<section ng-controller="Controller">
<div x-directive1>
<div x-directive2> <p>directive2</p> </div>
</div>
</section>
指令2
我已经完成了安装,并在其中安装了修复程序
为什么内部指令显示为兄弟(来自官方AngularJS指令文档):
transclude—编译元素的内容并使其可用
遵守指令。通常与ngTransclude一起使用。优势
转换是指链接函数接收转换
预先绑定到正确范围的函数在典型设置中
小部件创建一个隔离作用域,但转换不是一个隔离作用域
子级,但隔离作用域的同级。这使得
要具有私有状态的小部件,以及要绑定到的转换
父(预隔离)范围
在本例中,您不是在父指令上声明隔离作用域,而是在父指令上声明控制器。转换导致子指令成为其父指令和控制器的同级作用域,因为控制器位于父指令上
我的建议是,避免下达指令
我希望这会有所帮助。问题在于将直接放在执行转换的父指令上。创建一个换行元素并将指令放置在该元素上 像这样:
<section ng-controller="Controller">
<div x-directive1>
<div x-directive2> <p>directive2</p> </div>
</div>
</section>
指令2
我已经完成了安装,并在其中安装了修复程序
为什么内部指令显示为兄弟(来自官方AngularJS指令文档):
transclude—编译元素的内容并使其可用
遵守指令。通常与ngTransclude一起使用。优势
转换是指链接函数接收转换
预先绑定到正确范围的函数在典型设置中
小部件创建一个隔离作用域,但转换不是一个隔离作用域
子级,但隔离作用域的同级。这使得
要具有私有状态的小部件,以及要绑定到的转换
父(预隔离)范围
在本例中,您不是在父指令上声明隔离作用域,而是在父指令上声明控制器。转换导致子指令成为其父指令和控制器的同级作用域,因为控制器位于父指令上
我的建议是,避免下达指令
我希望这会有所帮助。我认为您需要在指令之间设置层次“require”链接。查看这个关于分层指令的教程,我认为您需要设置指令之间的分层“require”链接。查看这篇关于分层指令的教程。对scope变量使用$scope是个坏主意,但不是问题的原因。这里描述的问题是一个作用域层次结构问题,具体原因是在同样承载ng控制器指令的第一个指令中使用ng TRANCLUDE。提供解决方案的JSFIDLE和指向详细说明的链接。对scope变量使用$scope不是一个好主意,但不是导致此问题的原因。这里描述的问题是一个作用域层次结构问题,具体原因是在同样承载ng控制器指令的第一个指令中使用ng TRANCLUDE。提供解决方案的JSFIDLE和指向详细说明的链接。