Javascript jQuery插件作为指令并在插件上调用公共方法

Javascript jQuery插件作为指令并在插件上调用公共方法,javascript,angularjs,bxslider,Javascript,Angularjs,Bxslider,我成功地将jQuery插件制作成指令 app.directive('bxSlider', function($timeout) { return { restrict: 'A', link: function(scope, element, attrs) { $timeout(function(){element.bxSlider(scope.$eval(attrs.bxSlider))},1); }

我成功地将jQuery插件制作成指令

app.directive('bxSlider', function($timeout)
{
    return {
        restrict: 'A',
        link: function(scope, element, attrs)
        {
            $timeout(function(){element.bxSlider(scope.$eval(attrs.bxSlider))},1);
        }
    }
});
在我的控制器中(通过单击函数),我想调用插件上的公共方法,但我不确定如何做到这一点。我尝试将指令设置为一个变量,并从我的控制器以这种方式调用它,但我得到的错误是…没有方法


正确的方法是什么?

您可以广播一个事件来触发插件方法

app.directive('bxSlider', function($timeout)
{
    return {
        restrict: 'A',
        link: function(scope, element, attrs)
        {
            var slider;
            $timeout(function() {
                slider = element.bxSlider(scope.$eval(attrs.bxSlider));
            }, 1);

            scope.$on('reload-slider', function() {
                slider.reloadSlider();
            });
        }
    }
});

然后在控制器函数中使用
$scope.$broadcast('reload-slider')

为什么不在指令的链接函数中绑定单击侦听器?如果您可以指定要调用的确切函数以及按钮在DOM中的位置,那么会更容易提供帮助。@Jonathan好吧,jQuery插件有一个名为
reloadSlider()
的公共函数,我想在单击按钮时调用该函数。这只是一个
Change Items
,而
Change Items()
函数在我的控制器中,在plunker或jsfiddle.net中创建一个演示。通常,您可以在插件的API中工作,但您的插件配置选项不存在。还可以在指令的链接回调中添加方法