1

这是plunker:

http://plnkr.co/edit/4SakSg6x5wuQQ5eYBwFN?p=preview

如您所见,我有两个自定义指令:child-one 和 child-2。这两个指令在所有方面都是相同的,除了:

 1. child-one is within an html element that has the attribute ng-controller; and,
 2. child-two is not within such an html element, rather it's ng-controller is acquired thru the
    directive's .compile method, retrieving the controller thru the attribute var-ctrl.

孩子一确实填充了这些项目,孩子二没有。

问题:

如果我不希望 ng-controller 在指令之外,我必须对 child-2 做什么才能使其发挥作用?

4

1 回答 1

0

我认为该指令将其自己的控制器附加到模板的根元素(即 to <div id="ctlrId">),但您也尝试使用ng-controller. 我认为这行不通。如果您将模板包装在 a 中<div>...</div>,则 HomeCtrl 将被创建: plunker。在 plunker 中,我向 HomeCtrl 添加了一个alert()以显示它现在被调用了两次。

但是现在你有一个不同的问题:与 HomeCtrl 关联的 $scope 现在是隔离范围的子范围。child-two因此,您在元素上定义的所有属性都child2.html将是未定义的。您不能在指令的模板中定义控制器,同时尝试将属性从该控制器的范围传递到指令中。

于 2013-04-29T22:02:30.850 回答