从没有 rootScope 的另一个控制器更改已加载控制器中的范围值



我需要从控制器-1更新控制器-2(已加载)的一个$scope值。我不想使用$rootScope。

我可以使用广播或发射吗?

如果控制器处于子父关系中,则可以使用:

  • $emit(如果控制器 1 是控制器 2 的子项)
  • $broadcast(如果控制器 2 是控制器 1 的子级)

如果他们不在此关系中,那么您需要:

  1. 从控制器发出1
  2. 在最近的父级(可能是应用)中捕获事件
  3. 广播来自此父级的新事件
  4. 在控制器 2 中捕获事件

答案是肯定的。。。这并不总是最好的方法。

如果您愿意,您可以使用其他方式进行通信(例如使用公共服务)。

在根作用域上使用广播并侦听作用域。

最佳做法是为要收听或广播的每个自定义事件创建一个服务。

.service("hiEventService",function($rootScope,$scope) {
this.broadcast = function() {$rootScope.$broadcast("hi")}
this.listen = function(callback) {$scope.$on("hi",callback)}

})

您可以使用$localStorage来更改该值。 或者为 Get 创建一个服务并设置该值。

最新更新