Ответ 1
Изобразительно, вот как выглядят ваши области, прежде чем вводить в текстовое поле:
Обратите внимание, что изолировать область 006 parent - это transcluded scope, созданная директивой container
. Таким образом, searchText
в области 006 будет привязываться к базе данных 005 (а не к области 003), поскольку используется примитив.
Если мы введем 11
в первое текстовое поле и 22
во второе текстовое поле и снова рассмотрим области, мы увидим, где произошло привязку данных:
searchforThis2
окрашен в желтый цвет в области 005, чтобы указать, что было создано новое свойство. Это произошло из-за того, что используется примитив - область 005 не использует здесь прототипальное наследование, она просто создает новое свойство примитива для себя (т.е. Оно не выглядит в области 003 для имени свойства). Другие желтые элементы указывают на изменение примитивных значений.
Как вы уже выяснили, решением "наилучшей практики" этой проблемы является привязка к свойствам объекта (а не примитивам) в родительской области (то есть области 003).
Используя в контроллере следующее:
$scope.obj = {searchforThis1: "Sample Text 1", searchforThis2: "Sample Text 2"};
и в вашем HTML:
<search searchtext="obj.searchforThis1"...>
...
<div container>
<search searchtext="obj.searchforThis2"...>
Теперь области видимости выглядят следующим образом:
Если мы введем 11
в первое текстовое поле и 22
во второе текстовое поле и снова рассмотрим области, мы увидим, где произошло привязку данных:
Поскольку область 006 является областью выделения, она использует свой $parent
для доступа к области 005 (например, выше). Оттуда, однако, прототипное наследование находится в игре, поскольку мы не используем примитивы. Свойство объекта searchforThis2
находится в области 003.