Javascript 如何通过点分隔路径动态分配ngmodel

Javascript 如何通过点分隔路径动态分配ngmodel,javascript,angularjs,model,Javascript,Angularjs,Model,我见过几个类似的问题,但我的问题略有不同 我的控制器上有一个对象,看起来像这样: $scope.data = { foo: {bar: 1, bas: 2}, biz: 3, blat: 4 }; 我想创建一个输入,可以将其ng模型动态地分配给这些值中的任何一个 <label>Define Model</label> <input type="text" ng-model="input.model" /> <label&g

我见过几个类似的问题,但我的问题略有不同

我的控制器上有一个对象,看起来像这样:

$scope.data = {
  foo: {bar: 1,
        bas: 2},
  biz: 3,
  blat: 4
};
我想创建一个输入,可以将其ng模型动态地分配给这些值中的任何一个

<label>Define Model</label>
<input type="text" ng-model="input.model" />

<label>Data for {{input.model}}:</label>
<input type="text" ng-model="{{input.model}}">

但这只允许我访问biz和blat属性。有人知道怎么做吗?谢谢

您可以这样做,但前提是稍微修改数据数组的形式,使每个模型都有自己的对象(而不仅仅是一个基元),具有一个公共结构:

var data = {
  foo: {
    bar: {
      value: 1
    },
    bas: {
      value: 2
    }
  },
  biz: {
    value: 3
  },
  blat: {
    value: 4
  }
};
这样您就可以传递对象,这样
ngModel
仍然可以引用(并更改)原始对象

然后,您需要一个函数来转换类似“foo.bas”的“路径”,以返回正确的对象:

最后,所有这些都由在范围上设置“input.model”和“model”的输入控制:

<input placeholder="Model name" ng-model="input.model" />
<input placeholder="Model value" ng-model="model.value" />

可以看出。我必须承认,这是一种代码更少的好方法。

您可以做到这一点,但前提是您稍微修改数据数组的形式,使每个模型都有自己的对象(而不仅仅是一个基元),具有一个共同的结构:

var data = {
  foo: {
    bar: {
      value: 1
    },
    bas: {
      value: 2
    }
  },
  biz: {
    value: 3
  },
  blat: {
    value: 4
  }
};
这样您就可以传递对象,这样
ngModel
仍然可以引用(并更改)原始对象

然后,您需要一个函数来转换类似“foo.bas”的“路径”,以返回正确的对象:

最后,所有这些都由在范围上设置“input.model”和“model”的输入控制:

<input placeholder="Model name" ng-model="input.model" />
<input placeholder="Model value" ng-model="model.value" />

可以看出。我必须承认,这是一种代码更少的好方法。

您可以做到这一点,但前提是您稍微修改数据数组的形式,使每个模型都有自己的对象(而不仅仅是一个基元),具有一个共同的结构:

var data = {
  foo: {
    bar: {
      value: 1
    },
    bas: {
      value: 2
    }
  },
  biz: {
    value: 3
  },
  blat: {
    value: 4
  }
};
这样您就可以传递对象,这样
ngModel
仍然可以引用(并更改)原始对象

然后,您需要一个函数来转换类似“foo.bas”的“路径”,以返回正确的对象:

最后,所有这些都由在范围上设置“input.model”和“model”的输入控制:

<input placeholder="Model name" ng-model="input.model" />
<input placeholder="Model value" ng-model="model.value" />

可以看出。我必须承认,这是一种代码更少的好方法。

您可以做到这一点,但前提是您稍微修改数据数组的形式,使每个模型都有自己的对象(而不仅仅是一个基元),具有一个共同的结构:

var data = {
  foo: {
    bar: {
      value: 1
    },
    bas: {
      value: 2
    }
  },
  biz: {
    value: 3
  },
  blat: {
    value: 4
  }
};
这样您就可以传递对象,这样
ngModel
仍然可以引用(并更改)原始对象

然后,您需要一个函数来转换类似“foo.bas”的“路径”,以返回正确的对象:

最后,所有这些都由在范围上设置“input.model”和“model”的输入控制:

<input placeholder="Model name" ng-model="input.model" />
<input placeholder="Model value" ng-model="model.value" />
可以看出。我不得不承认,这是一种代码更少的好方法。

您可以使用

此处
$parse
尝试匹配
$scope.data
中的值,并将其与
definedModel

演示

您可以使用

此处
$parse
尝试匹配
$scope.data
中的值,并将其与
definedModel

演示

您可以使用

此处
$parse
尝试匹配
$scope.data
中的值,并将其与
definedModel

演示

您可以使用

此处
$parse
尝试匹配
$scope.data
中的值,并将其与
definedModel


演示

可能尝试使用所需的ng模型属性重新编译元素:

可能尝试使用所需的ng模型属性重新编译元素:

可能尝试使用所需的ng模型属性重新编译元素:

可能尝试使用所需的ng模型属性重新编译元素:

不要忘记模型也需要根据变化进行更新;感谢@BrandonTilley和Reza。这正是我想要的。别忘了模型也需要随着变化而更新;感谢@BrandonTilley和Reza。这正是我想要的。别忘了模型也需要随着变化而更新;感谢@BrandonTilley和Reza。这正是我想要的。别忘了模型也需要随着变化而更新;感谢@BrandonTilley和Reza。这正是我想要的。