Передача переменных в ng-transclude - PullRequest
1 голос
/ 19 марта 2019

Мне интересно, возможно ли передать параметр $ index в ng-transclude? Я пытаюсь сосредоточиться на текстовой области, нажимая на элементы в ng-transclude, вызывая функцию внутри контроллера, которая видит текстовую область, но я не могу получить правильный идентификатор.

<div
    ng-repeat="locale in $ctrl.enabled">
    <table>
        <tbody>
            <tr>
                <td flex layout="row" layout-align="start end">
                    <ng-transclude
                        ng-transclude-slot="theExtraMenu">
                    </ng-transclude>
                </td>
            </tr>
            <tr>
                <td>
                    <md-input-container
                        md-no-float="true">
                        <textarea id="{{'textarea'+$index}}">
                        </textarea>
                    </md-input-container>
                </td>
            </tr>
        </tbody>
    </table>
</div>    

1 Ответ

2 голосов
/ 01 апреля 2019

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

Причина, по которой я не пошел с родительским доступом к области, заключалась в том, что, если иерархия области видимости изменилась, она сломалась.

Спасибо @ georgeawg за вдохновение.

РЕДАКТИРОВАТЬ: пример -

<div ng-repeat="locale in $ctrl.enabled">
 <translated-textarea-menu locale="locale">

  <the-extra-menu>
    <ng-transclude ng-transclude-slot="theExtraMenu"></ng-transclude>
  </the-extra-menu>

 </translated-textarea-menu>

Родительский компонент (translation-textarea-menu)

component: {
    templateUrl: 'xyz.html',
    bindings: {
        locale: '&',
    },
    transclude: {
        theExtraMenu: '?theExtraMenu'
    },
    controller: TranslatedTextareaMenuController,
    controllerAs: '$ctrl',
}

И затем в компоненте transcluded (дополнительный компонент меню)

component: {
    templateUrl: 'x.html',
    bindings: {
        variables: '&'
    },
    require: {
        translatedTextareaMenu: '^translatedTextareaMenu'
    },
    controller: TheExtraMenuController,
    controllerAs: '$ctrl',
}

И получить к нему доступ с помощью this.translatedTextareaMenu.locale

Директив можно require контроллеров других директив для обеспечения связи между собой.Это может быть достигнуто в компоненте путем предоставления сопоставления объектов для свойства require.Ключи объекта указывают имена свойств, под которыми требуемые контроллеры (значения объектов) будут связаны с контроллером требуемого компонента.

Для получения дополнительной информации см.

...