Angularjs Angular JS父作用域未更新子作用域
您好,我有一些嵌套菜单,我试图改变一个子范围的颜色从父,但它不工作。下面是简化的代码Angularjs Angular JS父作用域未更新子作用域,angularjs,Angularjs,您好,我有一些嵌套菜单,我试图改变一个子范围的颜色从父,但它不工作。下面是简化的代码 .directive('botMenuClick', function() { return { link: function(scope,ele,attrs){ ele.bind('click', function(){ if(ele.attr('homeBtn')==='true'){
.directive('botMenuClick', function() {
return {
link: function(scope,ele,attrs){
ele.bind('click', function(){
if(ele.attr('homeBtn')==='true'){
scope.$parent.setDisplay = {'color': '#fff'} // this applies to all children but not the one which is set in else condition
}else{
scope.setDisplay = {'color': 'green'}
}
scope.$apply();
});
}
}
})
所以,一旦我进入else条件,菜单颜色变为绿色,那么不管发生什么,即使我进入上述homeBtn条件,它也不会变为白色。这是因为原型继承就是这样工作的。如果子对象设置的属性与原型上的属性同名,则子对象实际上是在自己创建一个新属性,该属性隐藏父属性。发件人: “将属性设置为对象将创建自己的属性。获取和设置行为规则的唯一例外是存在具有getter或setter的继承属性。”
我的假设是UI元素绑定到子作用域属性,该属性在被
else
条件设置之前不存在,因此直到那时它才在原型链中查找setDisplay
的值。一旦在子作用域上设置了else
条件激发setDisplay
,永远隐藏原型值。您是要从子范围访问父范围还是从父范围访问子范围?我正在从其自己的范围设置setDisplay样式,然后从父范围更改它。但是setDisplay已在html中以ng样式设置,如{{bottomSubMenu.subnumlabel}绑定到HTML中的作用域值不会设置任何内容。设置HTML绑定可以让$compile
服务知道要绑定到范围
上的哪些JavaScript属性。所有属性的声明和修改都是在JavaScript中进行的。请阅读此问题以了解更多上下文:我得到了Plunker链接。有两个菜单第一个工作,但我希望菜单1关闭所有菜单。我尝试了第二种方法,以便可以检测菜单1并执行其他任务,但其中一种方法是修改范围,无法从父级再次更改它。这里是链接