从控制器调用指令范围中定义的函数

时间:2015-04-26 22:59:21

标签: angularjs

编辑:我创建了一个Plnkr http://plnkr.co/edit/yuvtrPs3csAQZW7OF06O

我不确定这是否有任何关系,但我注意到控制台的日志显示:

  

事件跟踪Multipane Show预览工具栏未定义未定义

前提:我在&#34之后创建了一个新问题;可能已经忘记了"链接上的问题:

  

AngularJS: How do I call a function defined in a directive's scope from a controller?

由于我在那里得到了一个答案,我告诉他新的问题,以防他想在这里完成答案。 此外,我知道有类似的问题,但我找不到适合我案例的解决方案。

我需要调用一个属于我的Angular应用程序中使用的ng-directive的$ scope的函数。 遵循以下教程:

  

http://toddmotto.com/all-about-angulars-emit-broadcast-on-publish-subscribing/

我将以下代码设置为示例。

让我们说这个指令是这样定义的:(具体来说,指令 - 在这里简化 - 是插件定义的指令:www.ixtendo.com/polyglot-language-switcher-2/#angularjs )

注意:指令和控制器之间存在父子关系,我想访问该指令的控制器功能。这就是我使用 $ rootScope

的原因
for (int i=0; i < 6; i++)

我需要从我的控制器(称为 mainController )调用 myFunction ,这是我的指令所在的视图的控制器。我把它定义为:

.directive('my-directive', ['$document', '$timeout', '$rootScope', function ($document, $timeout, $rootScope) {
    return {
        restrict: 'E',
        replace: true,
        scope: {
            // ....
        },
        controller: ['$scope', '$rootScope', function ($scope, $rootScope) {

            var myFunction= function () {
                // do something...
            };

            $scope.$on('openLanguageSelectionPopup', function (){
                console.log("event triggered"); // NOT triggered!
                myFunction();  
            });
        }
    };
}]);

我修改了指令的控制器本身但没有成功

实际上未触发事件( openLanguageSelectionPopup )(不打印console.log)。 我也确定在某些时候达到$ on和$ emit(我尝试使用console.log(...))。

我理解问题可能出现在指令的范围定义中,作为以下答案中提出的解决方案:

  

Calling a method in a controller defined in a directive from a javascript function

但是,如果这是问题所在,我无法理解接受的答案可以为我的具体案例带来什么。

另外,我不明白我应该把$ rootScope :放在指令的控制器功能或指令的定义功能中(在我的例子中我将它添加到两个中。)

1 个答案:

答案 0 :(得分:2)

您在控制器中发出并广播您的内容。 但该指令不存在。

Atleast我认为这种情况正在发生。 因为如果我在超时中包装你的广播,他们会收到它。

你的傻瓜也缺少一些东西

您忘了将脚本添加到index.html 你在html中调用你的指令,但它应该是