0

Как атрибуты области наследуются, когда область не задана в определении угловой директивы?Угловая директива - что, если область не задана?

В Angular docs (в разделе 'Определение директивы Object') существуют два случая: когда scope является true или когда scope является объектом ({}). Что делать, если scope не установлен или false. Как атрибуты, унаследованные в этом случае для области и для ее детей?

+0

Отличное объяснение по этому вопросу Я нашел здесь: [Каковы нюансы объема прототипа/прототипного наследования в AngularJS?] (Http://stackoverflow.com/questions/14049480/what-are-the-nuances-of -scope-prototypal-prototypical-inheritance-in-angularjs/14049482 # 14049482) –

ответ

2

Когда Прицел установлен на ложное (также по умолчанию значения) в определении директивы, поведение области действия различается в зависимости от того, выполняете ли вы transclusion или нет.

Если вы не используете transclude, он в значительной степени использует родительскую область. Как если бы вы не использовали директиву и не создали связанный шаблон непосредственно на странице.

Fiddle

включение всегда создает дочерний объем, но он связан с родительской областью странным образом, когда сфера директивы является ложной. Вы можете «прочитать» родительскую область, но как только вы «напишите» на свойство, она больше не привязана к одному и тому же свойству родительской области, а теперь свойство в области дочерних объектов, если это свойство не является объектом.

Transcluded Fiddle

Child scope is the ones in green border. 

Попробуйте изменить родительский объем первой. Введите что-то в поле ввода «var», вы увидите, что var var также изменится. Но когда вы меняете var в области дочерних объектов, это не меняет родительскую область, а изменение переменной var в родительской области не влияет на область содержимого, так как связь нарушается, когда вы написали var из области дочерних объектов. Это не относится к объектам (попробуйте то же самое на sp.var, вы увидите, что вы не можете сломать «связь»). По мнению разработчиков, это ожидаемое и/или предполагаемое поведение.

+1

Хорошая мысль о переходе с добавлением другой области @Quad. Есть хорошая диаграмма того, что произойдет, если вы начнете использовать несколько областей, например здесь: http://stackoverflow.com/questions/16653004/confused-about-angularjs-transcluded-and-isolate-scopes-bindings – KayakDave

+0

Спасибо, это объясняет странное поведение, которое у меня было с сторонней директивой. –

+0

Действительно сладкие демонстрации! Таким образом, переход вместо просто ссылки на родительскую область делает мелкую копию. –

1

Если для области видимости установлено значение false (это значение по умолчанию), директива имеет ту же область действия, что и родительская, а новая область не создается. Поскольку они разделяют сферу действия, любые изменения родительского элемента будут отражены в директиве и наоборот.

Поскольку это не большой из герметизированной точки зрения, многие рекомендуют использовать изолят объем всякий раз, когда это возможно (изолят сферы будучи при установке рамки для {})

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