Если бы я имел директиву атрибута, например, что-то вроде этого:директивы Угловой атрибут - добавить нг-повторение ниже текущей директивы
<select multiple ... ng-model="ctrl.model" custom-directive="ctrl.customModel" />
, где, скажем, что ngModel
и customModel
массив. Есть ли способ, который я могу, в коде директивы, добавить элемент html ниже элемент директив, который может иметь доступ к области действия директивы и иметь возможность ссылаться на customModel
, так что в конце он выглядит примерно так: :
<select multiple ... ng-model="ctrl.model" custom-directive="ctrl.customModel" />
<div><!-- this code gets added by the custom-directive directive and uses it's scope -->
<span ng-repeat="item in customDirectiveCtrl.customModel" ng-bind="item.property"></span>
</div>
Я знаю, что могу добавить HTML вручную с помощью jqLite, однако этот HTML не имеет доступа к Директиве объема. Причина, по которой я не хочу преобразовывать директиву custom-directive
из директивы атрибута в директиву элемента, заключается в том, что сложнее добавить такие атрибуты, как id, name, required, disabled, ... в базовые элементы шаблона (в случае в этом примере, select
элемент)
EDIT: в соответствии с просьбой, вот пример того, как добавить элемент после директивы элемента:
{
restrict: 'A',
require: 'ngModel',
scope: { customModel: '=customDirective' },
link: function(scope, element, attrs, ngModel) {
//element.after('<div></div>'); //this adds a div after the directives element
element.after('<div><span ng-repeat="item in customModel" ng-bind="item.property"></span></div>'); //this will add the html in the string, but will not interpret the angular directives within since (i assume) that it is not bound to any scope.
}
}
Любой угловой компонент/директива добавлена как это не будет работать правильно или вообще.
Можете ли вы опубликовать код для своей директивы, который добавит этот элемент? Вы должны иметь возможность создавать свой фрагмент добавленного HTML и использовать службу компиляции $, чтобы прикрепить ее к той области, в которой вы хотите. – mcgraphix
@mcgraphix Я добавил пример добавления произвольного html после элемента директивы. Что вы говорите, так это то, что я мог бы вставлять '$ compile' в свою директиву и использовать его в результате' element.after' для компиляции выражения с помощью области директив? – MrPlow
Директива 'select' - это директива элемента, которая не использует область видимости. Он не будет хорошо работать с директивой атрибута, которая использует область выделения. Также директива 'select' использует функцию' ng-model' для своих целей. В пользовательской директиве следует избегать использования атрибута 'ng-model' для разных целей. – georgeawg