Angular JS父作用域不更新子作用域

时间:2014-09-05 18:15:19

标签: angularjs

您好我有一些嵌套菜单,我试图从父级更改子范围的颜色,但它不起作用。这是简化的代码。

.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状态,它也不会变成白色。

1 个答案:

答案 0 :(得分:2)

那是因为这就是原型继承的工作原理。如果子对象设置与原型上的属性同名的属性,则子实际上正在创建一个隐藏父属性的新属性。来自this mdn article

“将属性设置为对象会创建一个自己的属性。获取和设置行为规则的唯一例外是当存在具有getter或setter的继承属性时。”

我的假设是UI元素绑定到子作用域属性,该属性在else条件设置之前不存在,所以直到那时它正在查找原型链的值setDisplay。只要在子范围上设置了else条件触发setDisplay,就会隐藏原始值以用于永恒的剩余时间。