2

Я пытаюсь понять a working code. Он может создавать очень простые json-данные, добавляя name:value pairs один за другим с графическим интерфейсом; с помощью пользовательской директивы и ее функции связи, он создает шаблон HTML в качестве правой руки на рисунке ниже:

enter image description here

Что меня озадачивает является ng-model="$parent.keyName" в выделенной части, а также $parent.valueType, ng-model="$parent.valueName" в других часть.

1) К чему относится $parent (в коде или на примере приведенного выше изображения)?

2) Есть ли способ показать значение $parent или $parent.keyName в консоли или добавив что-то (например, alert) в программу?

+0

Посмотрите документацию для области информации о ее свойствах. –

ответ

0

1) $parent относится к размеру родительского объекта (любой области). Все области имеют родителя отдельно от $rootScope, который является областью верхнего уровня. Они могут быть созданы любой угловой директивой ng-*, включая, но не ограничиваясь ими, ng-controller.

Вообще говоря, считается неправильной практикой использования $parent, потому что это относится к непосредственным родительским объектам, которые могут быть изменены. Если иерархия области действия изменяется (что она могла бы сделать, добавив директиву ng-* к элементу html, содержащемуся в шаблоне пользовательской директивы, например), тогда иерархия может быть разбита, а $parent не будет ссылаться на ту же область, что и когда-то.

2) Да, вы можете. В инструментах разработчика Chrome, если вы используете Right Click > Inspect Element (как вы на снимке экрана), вы выбираете элемент. Тогда, если вы оставите этот элемент выделен и перейдите на вкладку консоли и введите:.

angular.element($0).scope() 

Это возвращает объем, что выбранный элемент пребывает в Тогда, если вы наберете:

angular.element($0).scope().$parent() 

Это возвращает родительский . объем сферы, что выбранный элемент проживает в а для чего это стоит вы также можете сделать:

angular.element($0).scope().$parent().$parent() 

и продолжать идти вверх по иерархии области видимости.

Также ознакомьтесь с AngularJS Batarang chrome extension, который позволяет просматривать области в инструментах разработчика Chrome.

+0

Затем, в примере моего изображения, к какому виду относится '$ parent'? –

+1

Все классы, помеченные знаком 'class =" ng-scope ", имеют к ним прикрепленную область. На скриншоте выделенный тег '' находится в границах области, созданной директивой 'ng-switch-when' указателя тега' ' выше. Итак, если у вас есть '$ parent.keyName', вы ссылаетесь на область * next * выше, которая выглядит так, как это создается с помощью' ng-repeater' (каждый элемент в ретрансляторе имеет собственную область). –

+0

У меня есть вопрос (http://stackoverflow.com/questions/41875477/the-common-version-of-angularjs-batarang) об AngularJS Batarang, есть ли у вас идеи? –

0

В чем состоит этот $ parent?

Родитель относится к области вашего родительского контроллера. Изображение в вашем вопросе не дает четкой картины, поэтому я добавлю пример для него.

<div ng-controller="EditorController"> 
    <div ng-controller="ChildEditorController"> 
     .... 
    </div> 
</div> 

Предположим, у вас есть свойство editorsList (массив) в вашем EditorController (который является родительским контроллер здесь), вы можете сделать что-то вроде

<div ng-controller="EditorController"> 
    <div ng-controller="ChildEditorController"> 
     Editors Count: {{$parent.editorsList.length}} 
    </div> 
</div> 

Таким образом, вы можете получить доступ к возможности вашего родителя с $ parent.

+0

Я только что добавил код в OP ... В проекте всего один «ng-controller», поэтому мне интересно, что означает '$ parent' ... –

+1

Контроллер не обязательно должен быть добавлено ng-контроллером. Это может быть любая директива. –