您好我有一些嵌套菜单,我试图从父级更改子范围的颜色,但它不起作用。这是简化的代码。
.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状态,它也不会变成白色。
答案 0 :(得分:2)
那是因为这就是原型继承的工作原理。如果子对象设置与原型上的属性同名的属性,则子实际上正在创建一个隐藏父属性的新属性。来自this mdn article:
“将属性设置为对象会创建一个自己的属性。获取和设置行为规则的唯一例外是当存在具有getter或setter的继承属性时。”
我的假设是UI元素绑定到子作用域属性,该属性在else
条件设置之前不存在,所以直到那时它正在查找原型链的值setDisplay
。只要在子范围上设置了else
条件触发setDisplay
,就会隐藏原始值以用于永恒的剩余时间。