2014-09-26 3 views
0

В настоящее время я создаю один из моих собственных пользовательских элементов HTML с директивой AngularJS. Я хочу настроить тип ввода диапазона из HTML5. Пока все хорошо, мои первые шаги были сделаны с успехом. Но теперь я хочу улучшить текущее состояние с помощью вложенного шаблона. На данный момент у меня есть. как это:Применить атрибуты к пользовательскому вложенному элементу в угловой директиве

.directive("mySlider", [function() { 
    return { 
     restrict: "E", 
     replace: true, 
     scope: { 
      min: "@", 
      max: "@", 
      step: "@?", 
      ngModel: "=" 
     }, 
     template: "<input class='my-slider' type='range'>", 
     link: function ($scope, $element) { 

      //some logic here 
     } 
    } 
}]); 

С, что, если я использую

<my-slider min="0" max="10" step="1" ng-model="sth"></my-slider>

я замена так:

<input class="my-slider" type="range" min="0" max="10" step="1" ng-model="sth">

То хорошо, как атрибуты из сферы написаны к типу ввода и затем можно использовать напрямую.

Но вот моя проблема: Теперь я хочу некоторый выходной HTML, как:

<div>

<label>blah</label>

<input class="my-slider" type="range" min="0" max="10" step="1" ng-model="sth">

</div>

Так что мой входной элемент должен быть вложен в div, возможно, с дополнительным элементом, например ярлыком или СТГ. Но когда я обновляю свой шаблон и просто занимаюсь размещением моего ввода там, все атрибуты из области действия применяются к корневому элементу (в этом случае div). Я не хочу их там, кроме элемента ввода.

Возможно ли и как можно добиться применения определенных атрибутов из области действия директив к различным конкретным элементам?

ответ

1

Изменить ngModel: "=" на sth: "=ngModel" чтобы получить модель ввода. Используйте {{}} нотацию, как вы указали в комментариях здесь для атрибутов. А затем сделайте свои родительские атрибуты примерно такими, как data-min, чтобы у вас не было уродливого исходного кода.

+0

Здравствуйте, спасибо вам за помощь. Мне кажется, что я просто копирую атрибуты от корневого элемента до вложенного? Но я хочу применить их ТОЛЬКО к вводу и удалить их из родительского div. Кроме того, похоже, что я не могу получить доступ к ng-модели из моего ползунка на входе. – Fidel90

+0

Поскольку у вас нет ничего в вашей области действия с именем «sth», если вы хотите, чтобы это сработало, вам нужно изменить свой изолятор на 'sth: '= ngModel'', который даст вам переменную области действия, двунаправленную привязку к ng- модель директивы. –

+1

бит 'var $ input' применяет его ТОЛЬКО к входу. Если вы хотите, чтобы они были удалены из родителя, вы теряете гибкость директивы. Это не имеет значения, так как «мин» на div ничего не делает. Если вы хотите, вы можете использовать префикс 'data-min', чтобы сделать его менее уродливым. Префикс данных игнорируется угловым, я думаю, поэтому внутренний код не изменяется. –

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