0

我有一个对象数组 ( ),它们定义了应如何为对象模型$scope.fields设置输入字段。$scope.datafieldName 属性实际上是dataObject 中字段的路径。嵌套对象由句点分隔。

例如:

    $scope.data = {
        user: {
        }
    }
    $scope.fields = [
        {fieldName:'user.firstName',fieldLabel:'First Name',dsiabled:false}
        {fieldName:'user.location.lat',fieldLabel:'Latitude',dsiabled:false}
        {fieldName:'user.location.long',fieldLabel:'Latitude',dsiabled:false}
    ]

HTML 中基于 fieldName 绑定 $scope.data 字段的最佳方法是什么。我知道 javascript eval - 但这是最​​好的方法吗?为什么这种语法对我不起作用?

IE:

 <div ng-repeat="fieldObj in fields">
    <dd ng-bind="eval('data.' fieldObj.fieldName)"></dd>
 </div>
4

2 回答 2

0

感谢@Felix Kling,我想出了如何去做。

我使用了 Felix_kings ref 中的 Object by string 想法,并将回调函数应用于接收完整对象引用的 ng-bind。

于 2015-06-04T19:35:08.793 回答
0

最近我开发了一种对象方法来完成这项工作。这种单行递归方法可以动态访问数组对象结构中的任何值,而不管它的嵌套有多深。根据你的例子

var fields = [
  {fieldName:'user.firstName',fieldLabel:'First Name',dsiabled:false},
  {fieldName:'user.location.lat',fieldLabel:'Latitude',dsiabled:false},
  {fieldName:'user.location.long',fieldLabel:'Latitude',dsiabled:false}
];

Object.prototype.getNestedValue = function(...a) {
  return a.length > 1 ? (this[a[0]] !== void 0 && this[a[0]].getNestedValue(...a.slice(1))) : this[a[0]];
};

document.write(fields.getNestedValue(0,"fieldName"));

对于结构更深的对象,您总是可以这样做

Object.prototype.getNestedValue = function(...a) {
  return a.length > 1 ? (this[a[0]] !== void 0 && this[a[0]].getNestedValue(...a.slice(1))) : this[a[0]];
};

var arr = [{fox: [{turn:[857, 432]}]}, {sax: [{pana:[777, 987]}]}, {ton: [{joni:[123, 567]}]}, {piu: [{burn:[666, 37]}]}, {sia: [{foxy:[404, 696]}]}],
  myObj = { foo : 1, bar: { baz : 2 }, bee : 3 };

document.write(arr.getNestedValue(3,"piu",0,"burn",1));

于 2016-05-06T12:28:06.937 回答