当我声明要使用的指令访问控制器功能时,它找不到控制器。
这是我在 app.js 中声明的指令:
app.directive("delete", function() {
return {
restrict: 'A',
link: function(scope, elem, attr, ctrl) {
elem.bind('click', function(e) {
alertCtrl.alert();
});
}
}
});
这是我的控制器:
app.controller('AlertController', function() {
this.alert = function() {
alert('Ahah!');
}
});
这是我的HTML:
<div ng-controller="AlertController as alertCtrl">
<div ng-repeat="i in [1,2,3]">
<img src='image.png' delete />
</div>
</div>
如果我点击图片,我没有收到任何警报,控制台说没有定义alertCtrl。为什么单击带有删除指令的图像时没有定义alertCtrl?
如果我将控制器更改为$ scope.alert = function()......它可以正常工作。但我不想要这个。
另外,这是处理这种情况的正确方法吗?如果没有,最佳做法是什么?
答案 0 :(得分:3)
你需要在范围内打电话。 scope具有属性alertCtrl
,它是您的控制器实例。当您在html上绑定它时,您的控制器别名(alertCtrl
)可用,因为scope
隐含在那里。但是当你在javascript中执行它,即在指令或其他控制器中,你需要从作用域获取控制器实例(定义为别名)作为属性。
scope.alertCtrl.alert();
<强> Plnkr 强>