2014-09-05 2 views
1

Привет, У меня есть некоторое вложенное меню, где я пытаюсь изменить цвет дочерней области от родителя, но не работает. Вот упрощенный код.Angular JS parent scope не обновляет область памяти

.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(); 
      }); 
     } 
    } 
}) 

Так, однажды я попасть в состоянии еще и цвет меню не меняется на зеленый, то независимо от того, что она не изменится на белый, даже если я иду в вышеописанном состоянии homeBtn.

+1

Вы пытаетесь получить доступ к родительскому объекту из области содержимого или области дочернего объекта из родительской области? – Prasad

+0

Я устанавливаю setDisplay стиль из своей собственной области, а затем меняю его последним от родителя. – alflashy

ответ

2

Это потому, что так работает прототипное наследование. Если дочерний объект задает свойство с тем же именем, что и свойство в прототипе, тогда ребенок фактически создает новое свойство, которое скрывает родительское свойство. От this mdn article:

«Установка свойства объекту создает собственное свойство. Единственное исключение из правил поведения получения и настройки - это когда унаследованное свойство имеет свойство getter или setter».

Мое предположение состоит в том, что элемент UI привязан к свойству дочерней области видимости, который не существует до тех пор, пока он не будет установлен условием else, поэтому до этого момента он ищет цепочку прототипов для значения setDisplay. Как только условие else срабатывает setDisplay, он устанавливается на дочерний объект, скрывая значение прототипа для остальной части вечности.

+0

но setDisplay уже установлен в HTML в нг-стиле, как этот

{{bottomSubMenu.subMenuLabel}}
alflashy

+0

Binding к значению области видимости в HTML является ничего не устанавливать. Установка привязки HTML позволяет службе '$ compile' знать, какие свойства JavaScript на' scope' должны связываться. Вся декларация и изменение свойств происходит в JavaScript. – bmceldowney

+0

Пожалуйста, прочитайте этот вопрос, чтобы получить больше контекста: http://stackoverflow.com/questions/16972976/angular-js-propagate-child-scope-variable-changes-to-parent-scope?rq=1 – bmceldowney

Смежные вопросы