Я высадился на эту страницу с аналогичной проблемой, связывания ngModel с пользовательской директивы , Вопрос несколько лет, но, может быть, мое решение поможет кому-то другому.
Во-первых, в index.html, я использую свою настраиваемую директиву с некоторыми атрибутами. Обратите внимание на штрих-код в html. Значения атрибутов - это то, что я хочу использовать в директиве.
index.html
<div>
<form name="userInfo">
<my-custom-directive for-model="ctrl.userInput"
for-label="Enter User Info"
for-other="more info for the directive">
<my-custom-directive>
</form>
</div>
// check to see the binding.
{{ ctrl.userInput }}
Далее в partial.html, я собираюсь установить некоторые значения по умолчанию, чтобы увидеть, когда директива работает должным образом, и когда я вижу по умолчанию.
partial.html
<div class="form-group">
<label>blankLabel</label>
<input type="text"
class="form-control"
ng-model="modelBlank">
</div>
Директива нуждается в другом синтаксисе, который, вероятно, является наиболее распространенной проблемой. Мне нравится определять переменную, поскольку я, вероятно, назначаю несколько атрибутов. Затем вызовите .attr() в переменной и передайте новую информацию, которую вы хотите применить. В этом случае буквально «ng-model» и значение настраиваемого атрибута, установленного в index.html.
directive.js
.directive('myCustomDirective', function() {
return {
templateUrl: 'partial.html',
compile: function (element, attributes) {
// Find the right element in the partial and assign a variable
var inputTag = element.find('input');
// use .attr() on the variable and pass it two arguments.
inputTag.attr('ng-model', attributes.forModel);
// Find a different element in the partial and replace the text.
var labelTag = element.find('label');
labelTag.html(attributes.forLabel);
}
};
})
Вы можете использовать консоль.log (element), но он будет генерировать много информации. Лучше осмотреть элемент после загрузки страницы, чтобы увидеть, что модель ng установлена на пользовательское значение. Если он правильно подключен, {{ctrl.userInput}} на странице index.html должен показать текст, введенный в форму.
Это много работы, но теперь myCustomDirective могут быть повторно использованы с различной информацией передается в:
<my-custom-directive for-model="ctrl.userName"
for-label="Enter Your Name:"
for-other="more info for the directive">
<my-custom-directive>
<my-custom-directive for-model="ctrl.userSelection"
for-label="Make a selection:"
for-other="more info for the directive">
<my-custom-directive>
Лично я никогда не имел проблем, добавляя атрибуты или угловые директивы с помощью этого метода, в том числе вещи как uib-typeahead. Просто помните о различиях синтаксиса между html и javascript.
доброжелательно поделитесь своим директивным кодом –
Добавлено, но пока не повезло. –