Javascript 从另一个作用域遍历作用域中的对象?

Javascript 从另一个作用域遍历作用域中的对象?,javascript,angularjs,Javascript,Angularjs,我不知道该怎么说,所以请容忍我 在我的主控制器上,我有一个大对象,其中包含一组嵌套的地理信息,可以用点符号遍历,如 $scope.cData = //large object pulled in from service // In the view, I can call the entire object or traverse it to return JSON {{cData}} // Entire object {{cData.United_States}} // US Data o

我不知道该怎么说,所以请容忍我

在我的主控制器上,我有一个大对象,其中包含一组嵌套的地理信息,可以用点符号遍历,如

$scope.cData = //large object pulled in from service

// In the view, I can call the entire object or traverse it to return JSON
{{cData}} // Entire object
{{cData.United_States}} // US Data only
{{cData.United_States.Southwest}} // Southwest region only
{{cData.United_States.Southwest.Texas}} // Texas state only
在子控制器中,我有一个作用域,它是由UI上的一组输入构建的。因此,根据用户所做的选择,所有变量都会被监视并连接到控制器作用域。根据用户的选择,watch函数将更改查询变量:

$scope.companyData = "United_States.Southwest"; // User chooses southwest
所以问题是,如何使companyData作为参数传递给视图中的cData对象?一种不正确的看待它的方式是这样的:

{{$parent.cData + {{companyData}} }}
$scope.getNestedProperty = function(obj, propertyExpr) {
    return $parse(propertyExpr)(obj);
}

换句话说,我想使用companyData作用域变量来引用遍历cData作用域变量的位置。

我建议在作用域上定义一个函数来执行此操作。您需要拆分点字符上的字符串,并以迭代方式访问嵌套属性。我不认为有一个线性的,但检查功能,将工作

它应该看起来像:

// Function taken from post referenced above
$scope.getDescendantProp = function(obj, desc) {
  var arr = desc.split(".");
  while(arr.length && (obj = obj[arr.shift()]));
  return obj;
}
在HTML中:

{{ getDescendantProp($parent.cData, companyData) }}

我认为使用alexsanford1提出的方法,您可以使用AngularJS功能来改进这一点:

插入控制器,然后此函数将如下所示:

{{$parent.cData + {{companyData}} }}
$scope.getNestedProperty = function(obj, propertyExpr) {
    return $parse(propertyExpr)(obj);
}

不要重新发明轮子。这个功能已经在AngularJS.alexsanford1中实现,这是一个很好的输入。非常感谢。虽然执行效率不高,但想法很好。很好!这个解决方案更干净:哇,这太不可思议了!非常感谢你!Alexander,有没有一种简单的方法让这个函数的值总是更新一个范围变量?例如,$scope.datavalues=getNestedProperty$parent.cData,companyData我想一个watch函数或其他什么东西会起作用?这样,如果我使用{{datavalues},它将像{{getNestedPropertya,b}一样更新。这有意义吗?