从另一个作用域遍历作用域中的对象
Traverse object in scope from another scope?
我不知道该怎么说,所以请耐心等待。
在我的主控制器上,我有一个包含一堆嵌套地理信息的大型对象,可以使用点符号遍历这些信息,如下所示......
$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) }}
相关文章:
- 向Angular作用域对象添加对象数组——TypeError
- 阻止控制器创建新的作用域对象
- 本地作用域对象
- 更新侧自调用函数中的外部作用域对象
- Javascript:替换函数的作用域对象
- 自定义指令中作用域对象内的嵌套对象
- 在作用域对象中定义但不可访问的属性
- 在绑定元素时从作用域对象添加格式
- AngularJs:将作用域对象的属性绑定到指令
- 正在与子指令作用域共享作用域对象
- 如何在显示之前格式化作用域对象中的数据
- 监视包含特殊字符作为关键字的作用域对象
- AngularJS指令没有设置第二级作用域对象
- AngularJS指令访问相同的作用域对象——避免覆盖
- 在Angular应用之外分配作用域对象
- Angularjs的ng-repeat带过滤器作用域对象
- 将作用域对象传递给可以监视和更新它的服务
- 如何将变量求值到局部作用域对象's属性,而不是JavaScript中的全局范围
- 如何在ng类指令中计算作用域对象
- AngularJS在调用rest式服务和作用域对象更新后选择值丢失