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

时间:2014-09-22 15:13:33

标签: javascript angularjs

我试图在角度控制器之间共享一些信息。我知道这不是一件难事,我在这里找到了一些很好的例子,但是我有一些奇怪的情况,我如何引入和更改我想要分享的数据。我试图应用我发现的其他一些例子来使其工作,但似乎无法使其工作,所以我会尽可能清楚地解释。

问题

我想做的事情非常简单。我有一些下拉值,我试图在控制器之间共享。因此,无论它在着陆时的价值如何,并且已经填充,当它发生变化时,它将显示在另一个控制器中。

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

所以工厂看起来像:

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/。但我似乎无法弄清楚如何将此应用于我正在做的事情。主要是因为数据是在需要共享的控制器之外确定的。我试图避免这种情况,但如果这是最好的方式,那么我应该改变它。

我希望输入填充,获取默认值,然后与控制器共享信息(并在更改时共享)。如果我可以做类似于双向数据绑定的操作,但是在控制器之间,那么我将提供的控制器总是提供选择列表答案的信息。我有点挣扎,这应该很容易,我想我只是错误地思考它。任何方向都会非常感激。感谢您花时间阅读!

2 个答案:

答案 0 :(得分:1)

不确定这是否是您正在寻找的,而是创建一个'服务'并从其他控制器听它,可能会派上用场。这里提到了类似的东西: https://stackoverflow.com/a/19469131/2658127

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

答案 1 :(得分:0)

您可以使用活动。

Scope Documentation

在此结帐中$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模块作为依赖项添加到您声明secondApp的{​​{1}}。这样你就可以与其他应用程序进行通信。