Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角度、动态指令加载和事件管理_Javascript_Angularjs - Fatal编程技术网

Javascript 角度、动态指令加载和事件管理

Javascript 角度、动态指令加载和事件管理,javascript,angularjs,Javascript,Angularjs,上下文 实际上,我正在开发一个应用程序,在这个应用程序中,我需要从一个控制器到一个视图(拖放系统)动态生成指令 它的工作原理如下: 指令 在控制器中,它看起来像: 从我的控制器,向我的指令发送一些信息,该指令应通过以下方式获取: $scope.$on('event',function(){console.log('yiihaaa');}) 似乎什么都没有发生 我需要显示日志 你能帮我吗 感谢您的帮助您是否尝试过此链接: 他们正在动态加载指令。正如@Grundy所说,这种方法可以适应您的需求。从

上下文

实际上,我正在开发一个应用程序,在这个应用程序中,我需要从一个控制器到一个视图(拖放系统)动态生成指令

它的工作原理如下:

指令

在控制器中,它看起来像:

从我的控制器,向我的指令发送一些信息,该指令应通过以下方式获取:

$scope.$on('event',function(){console.log('yiihaaa');})
似乎什么都没有发生

我需要显示日志

你能帮我吗


感谢您的帮助

您是否尝试过此链接:

他们正在动态加载指令。正如@Grundy所说,这种方法可以适应您的需求。从$rootScope使用$broadcast和$on

别忘了毁掉它

$rootScope.$on('$destroy', function () {
    subscription();
});
美元的广播就是这样

$rootScope.$broadcast("myEvent", {});

ngRepeate
创建自己的隔离作用域,指令链接函数中的作用域就是这个隔离作用域

当你这样做的时候

通过作用域层次结构向上分派事件名称,通知已注册的$rootScope.scope侦听器

用于将事件发送到您需要使用的子作用域

所以要解决你的问题,你至少有两种方法

1) 使用$broadcast而不是$emit

//代码在这里
角度.module('app',[])
.controller('ctrl',函数($scope){
$scope.listModules=[
{libelle:“利用者连接”,模板:,拖动:true}
];
$scope.recherchersts=function(){console.log('reload');$scope.$broadcast('reload');};
});
角度。模块('app')
.directive('dynamic',function($compile){
返回{
限制:“A”,
替换:正确,
链接:功能(范围、元素、属性){
作用域.$watch(attrs.dynamic,函数(html){
ele.html(html);
$compile(ele.contents())(范围);
});
作用域。$on('reload',function(){console.log('yiihaaa');})
}
};
});

样品
指令已加载

您如何尝试
发射
ngRepeat
创建隔离作用域,因此可能
$broadcast
是您在控制器中的函数在ng单击时需要的:$scope.recherstats=function(){$scope.$emit('reload');};你能提供JSFIDLE或PLUNK吗?它实际上是一个复杂的函数。我试图使它变得简单在你的OP中没有使用
ng点击
,因此不清楚所有的
$rootScope
如何工作不需要:-)简单的作用域就足够了
$scope.$emit('event');
$scope.$on('event',function(){console.log('yiihaaa');})
var subscription = $rootScope.$on("myEvent", function() {
    console.log("yiihao");
});
$rootScope.$on('$destroy', function () {
    subscription();
});
$rootScope.$broadcast("myEvent", {});
$scope.rechercherStats = function () { $scope.$broadcast('reload'); };