Я реализую пользовательский входной виджет. Реальный код является более сложным, но в целом это выглядит следующим образом:Должен ли я использовать область выделения в этом случае?
app.directive('inputWidget', function() {
return {
replace:true,
restrict: 'E',
templateUrl:"inputWidget.html",
compile: function (tElement, tAttributes){
//flow the bindings from the parent.
//I can do it dynamically, this is just a demo for the idea
tElement.find("input").attr("placeholder", tAttributes.placeholder);
tElement.find("input").attr("ng-model", tElement.attr("ng-model"));
}
};
});
inputWidget.html:
<div>
<input />
<span>
</span>
</div>
Чтобы использовать его:
<input-widget placeholder="{{name}}" ng-model="someProperty"></input-widget>
Заполнитель правильно отображаются выше потому что он использует ту же область действия родителя: http://plnkr.co/edit/uhUEGBUCB8BcwxqvKRI9?p=preview
Я удивлен г, если я должен использовать изолят сферу, как это:
app.directive('inputWidget', function() {
return {
replace:true,
restrict: 'E',
templateUrl:"inputWidget.html",
scope : {
placeholder: "@"
//more properties for ng-model,...
}
};
});
С этим, директива не разделяет ту же область с родителем, который мог бы быть хороший дизайн. Но проблема в том, что определение изоляционной области быстро станет беспорядочным, поскольку мы помещаем в него DOM-связанные свойства (заполнитель, тип, обязательный, ...) и каждый раз, когда нам нужно применять новую директиву (выборочная проверка на вход-виджет), нам нужно определить свойство в области изоляции, чтобы действовать как средний человек.
Мне интересно, нужно ли всегда определять область изоляции для директивных компонентов.
В этом случае, у меня есть 3 варианта:
- Используйте ту же область, что и родитель.
- Используйте изоляционный объем, как я сказал выше.
- Используйте изолированную область действия, но не привязывайте к ней свойства, связанные с DOM, так или иначе передайте свойства DOM из родителя напрямую. Я не уверен, что это хорошая идея, и я не знаю, как это сделать.
Прошу совета, спасибо.
Итак, является требование, чтобы произвольные атрибуты будут применяться к 'input' элемента в шаблоне? –
@New Dev: большинство из них делают. Эта директива состоит лишь в том, чтобы добавить еще несколько визуальных эффектов, основная функциональность ввода не должна сильно меняться. –
вы можете использовать 'scope: true' - он наследует внешнюю область –