Javascript 将父指令变量与子指令进行角度通信
我正试图基于转换到div中的元素构建一个简单的show/hide指令。我有一个家长和一个孩子的指令。单击父指令时,子指令应切换显示/隐藏其div。切换函数位于父控制器中,并在true和false之间切换变量,以便子指令可以显示/隐藏 问题是:父指令中的toggle函数工作正常,但是子指令在单击父指令时不知道toggle变量发生了变化。我使用require将ctrl传递给child指令中的link函数。通过这种方式,我可以访问父控制器对象以进行显示和隐藏。toggle变量对子项可见,但不反映初始加载页面后的任何更改。单击时,不会显示或隐藏任何内容 代码:Javascript 将父指令变量与子指令进行角度通信,javascript,html,angularjs,angularjs-directive,Javascript,Html,Angularjs,Angularjs Directive,我正试图基于转换到div中的元素构建一个简单的show/hide指令。我有一个家长和一个孩子的指令。单击父指令时,子指令应切换显示/隐藏其div。切换函数位于父控制器中,并在true和false之间切换变量,以便子指令可以显示/隐藏 问题是:父指令中的toggle函数工作正常,但是子指令在单击父指令时不知道toggle变量发生了变化。我使用require将ctrl传递给child指令中的link函数。通过这种方式,我可以访问父控制器对象以进行显示和隐藏。toggle变量对子项可见,但不反映初始加
angular.module('demo',[])
.directive('demoParent',function(){
返回{
限制:'E',
作用域:{},
是的,
模板:“”,
控制器:功能($scope){
$scope.toggleTarget=函数(){
this.openTarget=!this.openTarget;
};
this.openTarget=false;
}
};
})
.directive('demoChild',function(){
返回{
要求:“^demoParent”,
限制:'E',
是的,
链接:函数(范围、元素、属性、ctrl){
scope.ctrl=ctrl;
},
模板:“”,
};
});
子项是否需要向父项ctrl添加观察者,或者这是一种从父项传递到子项的孤立变量的情况 试试这个:
var me=这个;
$scope.toggleTarget=函数(){
me.openTarget=!me.openTarget;
}; 我已经对您的工作场景进行了修改,您对这个
功能也有问题,除了^demoChild
,您说这是一个打字错误。进入函数后,此
指向的是作用域,而不是您预期的控制器,因此应修改本节:
controller: function($scope) {
this.openTarget = false;
var _ctrl = this;
$scope.toggleTarget = function() {
_ctrl.openTarget = !_ctrl.openTarget;
};
}
demoChild
需要demoChild控制器。如果您需要从demoChild
访问demoParent
的范围,则需要使用require:'^demoParent'
来要求它。您也可以显示您的HTML吗?只是将其更改为demoParent,这是我的输入错误。我没有得到任何错误的要求,家长控制器。看来孩子只是没有意识到为我工作的家长控制器有任何变化。为什么把它分配给另一个var可以解决这个问题?直接使用vs并将其传递给子级。@user3613538var\u ctrl=this代码>需要此行来保持对控制器的引用,然后在函数中使用控制器。否则,此
指向$scope
本身,因为此
的值会有所不同-具体取决于调用函数的方式。
controller: function($scope) {
this.openTarget = false;
var _ctrl = this;
$scope.toggleTarget = function() {
_ctrl.openTarget = !_ctrl.openTarget;
};
}