Javascript 跨控制器发送数据

Javascript 跨控制器发送数据,javascript,angularjs,Javascript,Angularjs,我试着按照Angular creator Vojta提供的示例进行操作。然而,我似乎无法让emit正常工作。 这是我的小提琴: $emit在范围层次结构中向上冒泡事件,包括当前范围 $broadcast将事件向下发送到作用域层次结构,包括当前作用域 在您的情况下,ControllerZero的作用域和ControllerOne的作用域是同级的,因此$scope.$emit不会到达同级作用域 根据您想要接触的听众的不同,您可以: #1 $scope.$root.$emit("eventName",

我试着按照Angular creator Vojta提供的示例进行操作。然而,我似乎无法让emit正常工作。 这是我的小提琴:


$emit
在范围层次结构中向上冒泡事件,包括当前范围

$broadcast
将事件向下发送到作用域层次结构,包括当前作用域

在您的情况下,
ControllerZero
的作用域和
ControllerOne
的作用域是同级的,因此
$scope.$emit
不会到达同级作用域

根据您想要接触的听众的不同,您可以:

#1

$scope.$root.$emit("eventName", ...); // or $rootScope
这将到达
$rootScope
的侦听器:

$rootScope.$on("eventName", ...)
或者,#2,您可以从根目录广播:

$scope.$root.$broadcast("eventName", ...)
这将影响到所有听众

$scope.$on("eventName", ...)

$emit
在范围层次结构中向上冒泡事件,包括当前范围

$broadcast
将事件向下发送到作用域层次结构,包括当前作用域

在您的情况下,
ControllerZero
的作用域和
ControllerOne
的作用域是同级的,因此
$scope.$emit
不会到达同级作用域

根据您想要接触的听众的不同,您可以:

#1

$scope.$root.$emit("eventName", ...); // or $rootScope
这将到达
$rootScope
的侦听器:

$rootScope.$on("eventName", ...)
或者,#2,您可以从根目录广播:

$scope.$root.$broadcast("eventName", ...)
这将影响到所有听众

$scope.$on("eventName", ...)

您的代码似乎有一些拼写错误。另外,这两个控制器不共享相同的作用域。因此,如果要在它们之间广播事件,则需要使用根作用域:

var app = angular.module('myapp', []);

app.controller('ControllerZero', ['$scope', function($scope) {
    $scope.pass_data = function() {
        $scope.$emit('broadcasting', 'it succeeded!');
    };
}]);

app.controller('ControllerOne', ['$scope', '$rootScope', function($scope, $rootScope) {
    $scope.data = null;
    $rootScope.$on('broadcasting', function(data, args) {
        $scope.data = args;
    });
}]);

这里有一个提琴示例:

您的代码中似乎有一些打字错误。另外,这两个控制器不共享相同的作用域。因此,如果要在它们之间广播事件,则需要使用根作用域:

var app = angular.module('myapp', []);

app.controller('ControllerZero', ['$scope', function($scope) {
    $scope.pass_data = function() {
        $scope.$emit('broadcasting', 'it succeeded!');
    };
}]);

app.controller('ControllerOne', ['$scope', '$rootScope', function($scope, $rootScope) {
    $scope.data = null;
    $rootScope.$on('broadcasting', function(data, args) {
        $scope.data = args;
    });
}]);

这里有一个例子:

在本例中,问题是,
$emit
在作用域链上发送事件。它的同伴,
$broadcast
,在范围链中发送内容。您提供的示例似乎只在某些情况下有效。我过去完成这项工作的方式如下:

ctrlOne.js

ctrlTwo.js

您还可以将此流程与以下服务别名:

messenger.service.js


您可以在和上阅读Angular的文档。

在这种情况下,问题是
$emit
会向作用域链发送事件。它的同伴,
$broadcast
,在范围链中发送内容。您提供的示例似乎只在某些情况下有效。我过去完成这项工作的方式如下:

ctrlOne.js

ctrlTwo.js

您还可以将此流程与以下服务别名:

messenger.service.js


您可以在和上阅读Angular的文档。

如果您有一个大型应用程序,并且不想用根作用域中的消息污染它,您还可以使用您的父应用程序进行广播。这样,只有您的兄弟控制器和子控制器才会接收事件

$scope.$parent.$broadcast("eventName", ...);

如果您有一个大型应用程序,并且不想用来自根作用域的消息污染它,那么您也可以使用您的父应用程序进行广播。这样,只有您的兄弟控制器和子控制器才会接收事件

$scope.$parent.$broadcast("eventName", ...);

我以为是我的错。你是对的。我仍然对为什么我的实现没有成功感兴趣。试试看。真的,你最好使用定制服务。看,我想是的。我的错。你是对的。我仍然对为什么我的实现没有成功感兴趣。试试看。真的,你最好使用定制服务。看到了吗