Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.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 $emit在angularjs中将数据从一个控制器发送到另一个控制器时不工作_Javascript_Angularjs_Angularjs Scope - Fatal编程技术网

Javascript $emit在angularjs中将数据从一个控制器发送到另一个控制器时不工作

Javascript $emit在angularjs中将数据从一个控制器发送到另一个控制器时不工作,javascript,angularjs,angularjs-scope,Javascript,Angularjs,Angularjs Scope,我尝试在从一个控制器向另一个控制器发送数据时调用函数 用AngularJS。但在Angular v.1.2中它对我不起作用。我需要从ctrl2调用ctrl1函数。有人能给我一些关于这个问题的想法吗 示例代码: <div ng-contorller="ctrl"> <div ng-contorller="ctrl1"> </div> <div ng-contorller="ctrl2"> <

我尝试在从一个控制器向另一个控制器发送数据时调用函数 用AngularJS。但在Angular v.1.2中它对我不起作用。我需要从
ctrl2
调用
ctrl1
函数。有人能给我一些关于这个问题的想法吗

示例代码:

    <div ng-contorller="ctrl">
      <div ng-contorller="ctrl1">
      </div>
      <div ng-contorller="ctrl2">
      </div>
    </div>

function parentctrl(){

}
function ctrl1($scope){
 $scope.callfn = function(){
 console.log("success");
}
 $scope.$on('emitdata', function(event, data){
    $scope.callfn();
 })
}
function ctrl2($scope){       
 $scope.$emit('emitdata', {'key':'uu'});
}

函数parentctrl(){
}
功能ctrl1($scope){
$scope.callfn=函数(){
控制台日志(“成功”);
}
$scope.$on('emitdata',函数(事件,数据){
$scope.callfn();
})
}
函数ctrl2($scope){
$scope.$emit('emitdata',{'key':'uu'});
}

$emit
向上传播事件,这意味着发射控制器应位于侦听控制器内

<div ng-controller="ctrlone">
    <div ng-controller="ctrltwo">
        <!-- ctrltwo is the emitting controller
             ctrlone is the listening controller -->
    </div>
</div>

您也可以使用
$scope.$parent
而不是
$rootScope
,但在执行此操作时要小心,因为如果控制器嵌套发生更改,这可能会停止工作。

这是ctrl2函数的外观:

function ctrl2($scope, $rootScope) {
    $rootScope.$broadcast('emitdata', {'key':'uu'});
}

$emit用于向上发送,$broadcast用于向下发送$rootScope位于顶部。

或者您可以同时使用发射和广播。子范围发射,父范围广播。像这样:


你也应该发布你的标记。声明控制器的顺序很重要。你的代码没有明显的错误。好的,我会检查这一切都取决于你的控制器是如何嵌套的。尝试$rootScope.$emit(),然后它可以工作吗?我已经尝试将数据从一个控制器发送到父控制器内的另一个控制器。ctrl1和ctrl2放置在一个父控制器内。我该怎么办
function ctrltwo($rootScope) {
    $rootScope.$broadcast('myEvent', {'key':'uu'});
}

function ctrlone($scope) {
    $scope.$on('myEvent', function(event, data){
        $scope.callfn();
    });
}
function ctrl2($scope, $rootScope) {
    $rootScope.$broadcast('emitdata', {'key':'uu'});
}
app.controller("ctrl", function($scope) {
  $scope.$on('emitdata', function(event, data) {
    // This event will reach: ctrl -> ctrl1 + ctrl2
    $scope.$broadcast('broadcast-data', data);
  });
});

app.controller("ctrl1", function($scope) {
  $scope.$on('broadcast-data', function(event, data) {
    $scope.received = data;
  })
});

app.controller("ctrl2", function($scope) {
  $scope.emit = function() {
    // This event will reach: ctrl2 -> ctrl -> rootScope
    $scope.$emit('emitdata', {'key': 'uu'}); 
  };
});