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

Traverse object in scope from another scope?

本文关键字:作用域 对象 遍历 另一个      更新时间:2023-09-26

我不知道该怎么说,所以请耐心等待。

在我的主控制器上,我有一个包含一堆嵌套地理信息的大型对象,可以使用点符号遍历这些信息,如下所示......

$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函数将更改"query"变量:

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

所以问题是,如何使公司数据作为参数传递给视图中的cData对象?不正确的看待方式是这样的:

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

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

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

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

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

我建议在执行此操作的作用域上定义一个函数。您需要拆分点字符上的字符串,并迭代访问嵌套属性。我不认为有一行字,但请查看这篇文章以获取可以正常工作的功能。

它应该看起来像这样:

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