gpt4 book ai didi

javascript - $rootScope $broadcast 在两个不同的 Controller 上工作

转载 作者:行者123 更新时间:2023-12-03 12:36:21 25 4
gpt4 key购买 nike

我正在尝试构建一个单页应用程序,其中有一个设置表单,其中添加了一个名为“工单工作类型”的变量。当我在设置表单上进行更新或保存时,我将广播新的工单工作类型数组,以便它反射(reflect)列表以及工单创建页面。

但问题是广播仅适用于设置表单页面 Controller ,而不适用于工单添加 Controller 。

这是来自设置 Controller 的代码,在“addTicketWorkTypes”工厂方法之后,我进行了广播。这有效:

$scope.addNewTicketWorkType = function(newticketWorkType) {
if (newticketWorkType != '') {
ticketFact.addTicketWorkTypes(newticketWorkType, $scope.workspaceId).then(function(response) {
$rootScope.$broadcast('handleTicketWorkType',response.data);
ticketFact.ticketWorkType = '';
});
}
};

这会更新同一 Controller 上的列表

/*update ticket work type when changes at any place*/
$scope.$on('handleTicketWorkType', function(events, ticketWorkType) {
$scope.ticketWorkType = ticketWorkType;
console.log('Scope updated settingsEditCtrl');
});

但是相同的 $scope.$on 在不同的 Controller 上不起作用。你能帮忙吗?

整个代码也在Github上供引用:设置 Controller 在这里:https://github.com/amitavroy/my-pm-tools/blob/master/public/assets/js/dev/settings/controllers/settingsEditCtrl.js

工单添加屏幕 Controller 位于:https://github.com/amitavroy/my-pm-tools/blob/master/public/assets/js/dev/tickets/controllers/ticketAddCtrl.js

最佳答案

任何给定范围只会收到从继承层次结构中较高范围广播的事件的通知。要向层次结构向上发送事件,请使用 $rootScope.$emit()

如果您想确保事件将被发送和接收,并且您不担心其他作用域响应该事件,您可以执行以下操作:

function $broadcast() {
return $rootScope.$broadcast.apply($rootScope, arguments);
}

...

$broadcast('handleTicketWorkType', response.data);

在您的其他 Controller 中:

$rootScope.$on('handleTicketWorkType', function(data) {...});

如果这不起作用

一定是(如 @charlietfl 所建议的)目标 $scope 尚不存在,因此未收到该事件的通知。在这种情况下,创建一个 ticketWorkTypes 服务,该服务只不过是 ticketWorkTypes 列表。然后替换:

$rootScope.$broadcast('handleTicketWorkType',response.data);

ticketWorkTypes.push(response.data);

然后将 TicketWorkTypes 服务(数组)注入(inject)到需要该数据的任何 Controller 中。

关于javascript - $rootScope $broadcast 在两个不同的 Controller 上工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23721381/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com