Javascript 跨控制器发送数据
我试着按照Angular creator Vojta提供的示例进行操作。然而,我似乎无法让emit正常工作。 这是我的小提琴:Javascript 跨控制器发送数据,javascript,angularjs,Javascript,Angularjs,我试着按照Angular creator Vojta提供的示例进行操作。然而,我似乎无法让emit正常工作。 这是我的小提琴: $emit在范围层次结构中向上冒泡事件,包括当前范围 $broadcast将事件向下发送到作用域层次结构,包括当前作用域 在您的情况下,ControllerZero的作用域和ControllerOne的作用域是同级的,因此$scope.$emit不会到达同级作用域 根据您想要接触的听众的不同,您可以: #1 $scope.$root.$emit("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", ...)
$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", ...);
我以为是我的错。你是对的。我仍然对为什么我的实现没有成功感兴趣。试试看。真的,你最好使用定制服务。看,我想是的。我的错。你是对的。我仍然对为什么我的实现没有成功感兴趣。试试看。真的,你最好使用定制服务。看到了吗