Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs Angular JS父作用域未更新子作用域_Angularjs - Fatal编程技术网

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并执行其他任务,但其中一种方法是修改范围,无法从父级再次更改它。这里是链接