angularjs - 指令无权访问 Controller 功能(AngularJS)

标签 angularjs angularjs-directive angularjs-controller

当我声明要使用的指令来访问 Controller 函数时,它找不到 Controller 。

这是我在 app.js 中声明的指令:

app.directive("delete", function() {
    return {
        restrict: 'A',
        link: function(scope, elem, attr, ctrl) {
            elem.bind('click', function(e) {

                alertCtrl.alert();

            });
        }
    }
});

这是我的 Controller :

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没有被定义?

如果我将 Controller 更改为 $scope.alert = function()... 它工作正常。但我不想要这个。

此外,这是处理这种情况的正确方法吗?如果不是,最佳实践是什么?

最佳答案

您需要在范围内调用它。作用域具有属性alertCtrl,它是您的 Controller 实例。当您将 Controller 别名 (alertCtrl) 绑定(bind)到 html 上时,它就可用,因为 scope 在那里是隐式的。但是当您在 javascript 中(即在指令中)或另一个 Controller 中执行此操作时,您需要从范围中获取 Controller 实例(定义为别名)作为属性。

 scope.alertCtrl.alert();

<强> Plnkr

关于angularjs - 指令无权访问 Controller 功能(AngularJS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25677148/

相关文章:

angularjs - Angular : call service once multiple controllers

javascript - PassFactory.setNewPass 不是函数,工厂函数不是函数

javascript - Controller 不是函数得到未定义的错误消息 Angular js

javascript - map Controller 中的 ui-gmap-marker 没有触发标记单击事件

javascript - 从另一个模块访问范围的指令

angularjs - Angular Bootstrap DatePicker 指令(Eternicode 版本)未保持打开状态

html - 部分只读文本框

javascript - AngularJS 和 Q.fcall

javascript - 当我使用自定义 Angularjs 指令时,为什么 HTML 代码没有呈现

javascript - 有没有更好的方法在 ng-grid 中切换进出编辑模式?