【发布时间】:2015-02-16 17:32:20
【问题描述】:
我正在尝试在 AngularJS 中构建一个可编辑的表格组件。我希望它工作的方式是,当用户单击特定行上的编辑按钮时,该行将替换为包含绑定到模型的输入字段的“编辑模板”。你可以在这个Plunker看到我的进步。
我正在使用自定义指令来定义一个包含可编辑行的表格,如下所示:
<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 字符串,并使用 $compile 将表达式绑定到指令范围。我想做的不是在 Link 函数中对 html 进行硬编码,而是从指令“edit-tmpl”属性引用的外部文件加载模板。注意:为指令设置 templateUrl 不起作用,因为我只希望在用户单击编辑按钮时将模板加载并注入到 DOM 中。
我的问题有两个:
1) 如何从我的指令的 Link 函数中的“edit-tmpl”属性引用的模板文件中加载 html?
2) 由于我是 Angular 新手,我想知道我的方法是否符合 AngularJS 的方式?从角度设计的角度来看,通过这样的属性在 HTML 中指定编辑模板,然后在指令的 Link 函数中加载是一个好主意,还是我缺少更好的方法?
【问题讨论】:
-
如果你对角度方式感兴趣 - 你可以看看 bootstrap-ui 指令。它们所有的模板都存储在 $templateCache 中并由 id 引用,因此可以在外部替换它们。我不明白为什么你如此关心加载额外的模板 - 99% 的它不是你的应用程序的一个狭窄的地方。
-
谢谢彼得。我将看一下 bootstrap-ui 指令。我想要在 Link 函数之外指定模板的基本原因是,该指令可以在不同的表中重用,并为每个表创建不同的编辑模板。我的一些表可能包含一些更复杂的 UI 来编辑行(不仅仅是简单的输入字段),所以我希望能够为每个表单独定义行编辑器,但无需每次都编写全新的指令。
标签: angularjs angularjs-directive