【发布时间】:2013-12-21 01:36:41
【问题描述】:
我被分配了创建一组“卡片”的任务,例如在 Google 和其他类似网站上使用 AngularJS 作为仪表板。每张卡片都具有独立于其他卡片的功能,并且它们都必须在其数据从 API 返回后立即出现。将来,我们将允许将这些卡片固定/取消固定到仪表板,以及由用户自定义的顺序。
我创建了一个“card-dealer”指令,该指令将为卡片对象数组中的每张卡片包含一个 ng-repeat。这些卡中的每一个都需要有自己的动态模板和控制器,这是我遇到问题的地方。我能够弄清楚如何传递动态templateUrl,但控制器是另一回事。通过模仿我在 Pluralsight 视频上观看的内容,我几乎已经弄清楚了,我应该能够将 card.controller 变量传递给指令“ctrl”属性,如下所示:
<card-dealer ng-repeat="card in cards" card="card" ctrl="{{card.controller}}"/>
但是,指令中的ctrl='{{card.controller}}' 变量在发送到指令之前并未被解析。在指令中,我通过设置controller: '@' 和name: 'ctrl' 来动态设置控制器。这会查看名为“ctrl”的属性的元素,并将其值作为控制器的名称返回。当我输入指令控制器的字符串名称而不是使用{{card.controller}} 变量时,此方法有效,但仅输入字符串不是动态的。
我需要在变量到达指令之前对其进行解析,以便它查找正确的控制器名称。我创建了一个 JS Fiddle 来演示我的问题:http://jsfiddle.net/kPdCk/。这应该返回两个警报框,一个代表每个指令控制器。如果您当前运行它,您将在控制台日志中看到它正在尝试使用变量名称而不是变量值来搜索控制器。
请帮忙!!这对我们整个仪表板的未来至关重要,一旦我们弄清楚如何传入动态控制器名称,我们就会很成功。先谢谢了!!!
【问题讨论】:
标签: javascript angularjs dynamic controller directive