Я пытаюсь создать редактируемый компонент таблицы в AngularJS. Способ, которым я хочу, чтобы он работал, заключается в том, что когда пользователь нажимает кнопку «Редактировать» на определенной строке, эта строка заменяется «шаблоном редактирования», содержащим поля ввода, привязанные к модели. Вы можете увидеть мой прогресс в этом Plunker.Динамическая загрузка внешнего шаблона в AngularJS
Я использую пользовательскую директиву, чтобы позволить мне определить таблицу с редактируемыми рядами следующим образом:
<table ng-controller="peopleController as peopleCtrl">
<tr editable-row edit-model="person" edit-tmpl="'person-editor.html'" ng-repeat="person in peopleCtrl.people">
<td>{{person.name}}</td>
<td>{{person.age}}</td>
<td>
<button>Edit</button>
</td>
</tr>
</table>
В функции Ссылки на директивах редактируемых-Роу я создаю «шаблон редактирования» в виде строки html и использование компиляции $ для привязки выражений к области директивы. То, что я хотел бы сделать вместо жесткого кодирования html в функции Link, заключается в том, что шаблон загружен из внешнего файла, ссылающегося на атрибут «edit-tmpl». Примечание. Установка шаблонаUrl для директивы не будет работать, так как я хочу, чтобы шаблон загружался и вводился в DOM, когда пользователь нажимает кнопку редактирования.
Мой вопрос заключается в два раза:
1) Как я могу загрузить HTML из файла шаблона, на которую ссылается атрибут «редактировать-Tmpl» в функции Link моей директивы?
2) Поскольку я новичок в Angular, мне интересно, подходит ли мой подход к способу AngularJS? С точки зрения углового дизайна хорошей идеей является создание шаблона редактирования, указанного в HTML, через атрибут, подобный этому, а затем загруженный внутри функции ссылки директивы или есть лучший подход, который мне не хватает?
Если вас интересует угловой способ - вы можете взглянуть на директивы bootstrap-ui. Все их шаблоны хранятся в $ templateCache и ссылаются на id, поэтому их можно заменить на внешний. Я не понимаю, почему так много внимания уделяется загрузке дополнительного шаблона - 99%, что это не узкое место вашего приложения. –
Спасибо Петру. Я рассмотрю директивы bootstrap-ui. Основная причина, по которой я хочу указать шаблон за пределами функции Link, заключается в том, что директива может быть повторно использована в разных таблицах, а для каждой таблицы создается другой шаблон редактирования. Некоторые из моих таблиц могут содержать несколько более сложных пользовательских интерфейсов для редактирования строк (а не только простых полей ввода), поэтому я хочу иметь возможность определять редактор строк отдельно для каждой таблицы, но не каждый раз писать целую новую директиву. – John