从另一个范围遍历对象的范围?

时间:2014-04-03 18:03:33

标签: 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 only
{{cData.United_States.Southwest}} // Southwest region only
{{cData.United_States.Southwest.Texas}} // Texas state only

在子控制器中,我有一个在UI上用一堆输入构建的作用域。因此,根据用户的选择,所有变量都会被监视并连接到控制器范围。根据用户选择的内容,监视功能将改变“查询”变量:

$scope.companyData = "United_States.Southwest"; // User chooses southwest

所以问题是,如何将companyData作为参数传递给视图中的cData对象?看待它的方式不正确就像这样:

{{$parent.cData + {{companyData}} }}

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

2 个答案:

答案 0 :(得分:4)

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

在您的控制器中注入$parse,然后此函数将如下所示:

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

答案 1 :(得分:3)

我建议在范围内定义一个函数来执行此操作。您需要在点字符上拆分字符串并迭代访问嵌套属性。我认为没有一个单行,但请查看this post以查找可行的功能。

它应该类似于:

// 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) }}