在Angular指令中的事件处理程序中调用范围函数

时间:2014-11-28 13:56:55

标签: javascript angularjs

我在我的指令的链接功能中有以下代码:

    link: function (scope, element) 
        {
            angular.element($window).bind('resize', scope.layout);


        //  angular.element($window).bind('resize', function() 
        //  {
        //      scope.layout();
        //  });     


            scope.onImgLoad = function(e) {
                scope.ih=e.target.naturalHeight;
                scope.iw=e.target.naturalWidth;
                //scope.layout();
            };

            scope.layout = function() { 
               // do some style stuff based on image and window size
           }
}

当窗口调整大小时发生错误 undefined不是函数(scope.layout) 我也尝试了评论的代码,但我得到了同样的错误。如何在resize事件处理程序中调用链接范围内的函数?

更新

resize事件正在父指令中寻找布局函数。我通过给出我的指令隔离范围来解决它。

1 个答案:

答案 0 :(得分:0)

scope.layout事件上进行绑定时,未定义resize函数。

尝试在函数定义之后放置绑定。

 scope.layout = function() { 
               // do some style stuff based on image and window size
 }


 angular.element($window).bind('resize', scope.layout);

这里有一个plunkr demontration(回调只执行一次):http://plnkr.co/edit/gUeKSYuUGEv9MT8idROg?p=preview

无论如何,如果不需要回调作为scope方法,您可以将其定义为:

function layout() { ... }

并且可以在任何执行点上使用。