我不知道怎么说这个,所以请耐心等待..
在我的主控制器上,我有一个包含一堆嵌套地理信息的大对象,这些信息可以用点符号遍历,如此......
$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范围变量的位置。
答案 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) }}