角度,控制器之间共享(在填充后?)

angular, sharing between controllers (after it's been populated?)

本文关键字:填充 控制器 之间 共享 角度      更新时间:2023-09-26

我正在尝试在具有角度的控制器之间共享一些信息。我知道这并不难,我在这里找到了一些很好的例子,但我有一个奇怪的场景,我是如何引入和更改我试图共享的数据的。我试图应用我发现的其他一些例子来实现这一点,但似乎无法实现,所以我会尽可能清楚地解释。

问题

我想做的是直截了当的。我试图在控制器之间共享一些下拉列表值。因此,无论它在着陆时有什么值,以及它何时发生变化,都会显示在另一个控制器中。

问题是,我已经建立了一个大工厂,所有的控制器都从它调用来填充它们的输入,有10个控制器,每个控制器都有一堆输入,在着陆时必须填充,所以我有一个工厂,为存储在vars中的每个$http调用都有一个$q.all函数,然后调用另一个调用以查看是否保存了任何数据,并将默认值更改为保存的值如果可能的话,我更愿意保留这种方法。我在任何地方都用它,改变它可能会很痛苦。

所以工厂看起来像:

var criteria1 = $http({method: "GET", url: "/crit1"});
var criteria2 = $http({method: "GET", url: "/crit2"});
var criteria3 = $http({method: "GET", url: "/crit3"});
  return {
 critera: $q.all([criteria1 ,criteria2, criteria3])
 }

在控制器中,我做了一个:

getDefaults.criteria.then(function(data){
//fill out defaults and values for selects with this data
//then get saved data (if any)
$http({
            method: "GET",
            url: "/getsavedData/" + sectionID
        })
        .success(function(data, status, headers, config){
        //if data !null then overrite scopes for defaults
        };

因此,我要做的是与另一个控制器共享该控制器上2个选择列表的值。我得到了这个例子——http://jsfiddle.net/HB7LU/6510/.但我似乎不知道如何将其应用于我正在做的事情。主要是因为数据是在需要共享的控制器之外确定的。我试图避免这种情况,但如果这是最好的方式,那么我可能应该改变它

我希望输入填充,获得默认值,然后与控制器共享信息(并在信息发生变化时共享)。如果我能做一些类似于双向数据绑定的事情,但在控制器之间,这将是理想的,所以我要馈送的控制器总是馈送选择列表答案的信息。我已经为此挣扎了一段时间,这应该很容易,我想我只是想错了。任何指示都将不胜感激。感谢您抽出时间阅读!

不确定这是否是您想要的,但创建一个"服务"并从其他控制器中侦听它可能会派上用场。这里提到了这样的事情:https://stackoverflow.com/a/19469131/2658127

您可以将<input>更改为您想要的任何内容。

您可以使用事件。

范围文件

在此检出$on$broadcast$emit

在一般用例中,angular.element(catapp).scope()的使用是为在角度控制器之外使用而设计的,比如在jquery事件中。

理想情况下,在您的使用中,您将在控制器1中写一个事件为:

$scope.$on("myEvent", function (event, args) {
   $scope.rest_id = args.username;
   $scope.getMainCategories();
});

在第二个控制器中,你只需要进行

$scope.initRestId = function(){
   $scope.$broadcast("myEvent", {username: $scope.user.username });
};

编辑:意识到这是两个模块之间的通信

您可以尝试将firstApp模块作为声明angular.modulesecondApp的依赖项。这样你就可以与其他应用程序进行通信。