我有以下设置:
应用程序/指令
var app = angular.module("MyApp",[]); app.directive("adminRosterItem",function () { return { restrict: "E",scope: { displayText: "@" },template: "<td>{{ displayText }}</td>",// should I have this? link: function(scope,element,attrs){ // What do I put here? I don't seem to have any // element to initialize (set up event handlers,for example) },compile: function(?,?,?){} // should I have this? If so,what goes inside? } });
调节器
function PositionsController($scope) { $scope.positions = [{ Name: "Quarterback",Code: "QB" },{ Name: "Wide Receiver",Code: "WR" } ]; }
HTML:
<div ng-app="MyApp"> <div ng-controller="PositionsController"> <table> <tr ng-repeat="position in positions"> <admin-roster-item displayText="{{ position.Name + ' (' + position.Code + ')' }}"></admin-roster-item> </tr> </table> </div> </div>
这是一个非常简单的例子,但我无法让它呈现.也许有一些教程没有告诉我,还是那个秘密的角色知识?
如果我删除< trng-repeat =“...”/>内的指令并将< td> {{displayText}}< / td>相反,它将显示所有记录.
但是,我希望该指令比仅仅一个< td> {{}}< / td>更复杂. (最终),以便我可以在多个应用程序中重用此指令.
解决方法
同意你需要考虑指令的开始和结束.这是一个plnkr,它说明了绑定到数组中每个项目的指令 –
http://plnkr.co/edit/IU8fANreYP7NYrs4swTW?p=preview
如果你想让这个指令封装一个由父范围定义的集合的枚举,它就会变得更加棘手.我不知道以下是“最佳实践”,但这是我如何处理它 – http://plnkr.co/edit/IU8fANreYP7NYrs4swTW?p=preview
当依赖该指令执行迭代时,您会涉及到跨越,这是一个组成的单词,意思是(据我所知)采用父级中定义的内容,将其推入指令中,然后对其进行评估.我一直在工作几个月,我开始认为,要求这个指令迭代是一种气味,我一直能够设计出来.