AngularJS 如何从指令模板中捕获事件?

AngularJS how to capture events from inside the directives template?

我有一个指令,它的模板中有一个 <img> 元素,我想执行一个在我的指令范围内的自定义方法:

<my-directive>
    <!-- my directives template -->
    <p>...</p>
    <img onload="myScopeMethod()">
    <p>...</p>
    <!-- my directives template -->
</my-directive>

我找到了这个 Get width height of remote image from url,但这只有在我将它应用到在 <img> 元素上工作的指令时才有效。

指令的目的是显示一个允许我操作图像的小部件(通过拖动滑块缩放它)但我不知何故需要获得它的原始大小。

如何让它从我的控制器范围执行方法?

您通常希望将加载处理程序函数从模板本身中取出并将其粘贴到 link 函数中。从那里开始,它在某种程度上取决于您的指令以及您使用的是隔离作用域、继承作用域还是与父作用域相同的作用域。

如果您的指令定义对象中有范围键,并且它被设置为对象文字,那么您正在使用隔离范围。在这种情况下,您需要以某种方式传递它,最直接的方法是使用“&”选项。

如果您没有作用域键或具有作用域键并且它被设置为布尔值,则您使用的是相同的作用域或继承的作用域。在这种情况下,您需要做的就是调用 $scope.originalScopeMethod() ,它会在范围内调用它或在原型链中找到它。

Here's an example 三个不同的场景。底部的 table 来自 'main' 控制器作用域,而较小的数字来自指令作用域。

如果是我,我可能会选择隔离或继承范围,这样您就可以更轻松地分别跟踪多个图像。我的示例中的共享范围版本仅适用于单个图像,但如果你真的需要,你可以让它使用数组或散列。

如果我以任何方式误解了您的问题,请告诉我。