编辑:我创建了一个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 :放在指令的控制器功能或指令的定义功能中(在我的例子中我将它添加到两个中。)
答案 0 :(得分:2)
您在控制器中发出并广播您的内容。 但该指令不存在。
Atleast我认为这种情况正在发生。 因为如果我在超时中包装你的广播,他们会收到它。
你的傻瓜也缺少一些东西
您忘了将脚本添加到index.html 你在html中调用你的指令,但它应该是