Показать сообщение отдельно
  #2 (permalink)  
Старый 31.10.2013, 02:31
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

Все очень просто. И дальше куча текста такая
controller имеет дочерний scope от scope ngApp, а scope ngApp дочерний от scoope root.

Причем scope в самом прямом смысле дочерний, так как ссылка на родительский scope хранится в прототипе.

Теперь вспомним как работают прототипы.
1)Если есть объект но в нем нет переменной data то при попытки получить data мы получим undefined
2)Если есть объект но в нем есть переменная data то мы получим значение
3)Если есть объект и в нем нет переменной data, но она есть в прототипе то при запросе мы получим data из прототипа.
4) Если есть объект и в нем есть переменная data, и она есть в придачу в прототипе то при запросе мы получим data из объекта а не из прототипа.

В случае 1,2,3, и4 , при попытки записать в обьект значение data оно запишется не в прототип а в объект.

Так как scope это тоже обьект где в протопе родительский scope, то естественно scope ведет себя так как и положено объектам с прототипным наследованием.

watch слушает переменную data в контроле, но ведь в scope контрола ты ее не обьявлял а это значит она берется из прототипа. А в прототипе у нас scope ngApp как помнишь. Поэтому когда ты меняешь переменную data в scope ngApp, то watch контролера реагирует так будто это изменилась data в его собственном scope. Иными словами watch слушает не переменную в scope а переменную в прототипе. Но как только ты запишеш в scope контрола значение для переменной data, то watch будет слушать только data в scope а не спускаться вниз по цепочке прототипов.

Вот именно поэтому когда ты меняешь верхнее поле то нижнее реагирует тоже, но как только ты меняешь нижнее поле то нижнее перестает реагировать на верхнее и существует само по себе. Ведь у скопа контролла есть теперь своя переменная data и искать значение для data в прототипе интерпретатору нет надобности.

Иными словами scope ведет себя так же как и объект с прототипным наследованием, наверно оттого что он и есть объект с прототипным наследованием

Я объяснил как сумел )))

Про объект.
data.message это объект data у которого есть свойство message. Это означает что устанавливая значение message ты устанавливаешь ее в объекте на который ссылается свойство data в scope ngApp. Иными словами watch контрола опять находит data в прототипе. И от того что ты добавляешь или меняешь свойство в объекте data никакие изменения в scope контролла не произойдут и data будет общей для ngApp и controller. Это по прежнему типичное поведение объектов с прототипным наследованием.

По второму вопросу.
Сделай директиву которая вешается на класс my и в директиве можеш вытворять все что угодно с элементом этого класса. Хочешь события мыши слушай, а хочешь волчком вращай
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 31.10.2013 в 03:24.
Ответить с цитированием