在AngularJS中如何从父作用域访问多个子作用域

时间:2017-01-09 15:32:45

标签: javascript angularjs

我有一个父zone builder控制器,其中有多个US States,每个州都有多个邮政编码。

以下是格式基础知识的细分:

建筑控制器

app.controller("builderController", function($scope, $http, $rootScope, $timeout) {
  $scope.zones = [];
});

ZIP控制器

app.controller("zipController", function($scope, $http, $rootScope, $timeout) {

  $scope.zipCodes = [];

  $scope.addZipCode = function() {
    $scope.zipCodes.push({code: '', distance: '25mi'});
  }
  $scope.removeZipCode = function(index) {
    console.log(index, 'index removing');
    $scope.zipCodes.splice(index, 1);
  }

});

在构建器控制器内部的multiple zipControllers内可能有builderController我想要提供一个对象或方法来遍历所有Zip控制器,以便我可以计算总距离和每次更新其中一个子控制器时使用的邮政编码数量。

在Angular中做这样的事情的最有效方法是什么?

基本目标

所以在一个zipController中可能有4-5个builderController个元素我希望在builderController中有一个名为totalZipCodes的变量来计算总数每个控制器的每个zipCodes数组中的邮政编码,如何使用服务或工厂执行此操作?或者还有另一种方式吗?

2 个答案:

答案 0 :(得分:0)

将数据存储在工厂中并让控制器调用工厂进行计算。

答案 1 :(得分:0)

一般方法

正如@PrinayPanday在他的评论中建议的那样,你应该使用像组件/指令这样的东西。我正在通过说我将使用术语指令和组件可互换,因为我不确定你的约束。我会通过以下方式实现这一目标:

  • 创建一个定义指令控制器的父指令
  • 创建需要父指令控制器的子指令
  • 当child指令初始化时,它将使用父控制器注册自己
  • 使用父控制器的 list 子指令控制器来执行您需要的操作。

您还可以使用子域的作用域在某些事件(例如$onInit)上声明回调,而不是定义指令控制器。我已回答了几个这样的问题。因此,您可能会发现这些答案有助于更好地理解上述解决方案:

特定于您的需求

当我重读你的问题时,我不得不问是否有更好的方法通过在服务/模型中共享数据而不是需要自定义指令来解决这个问题?