如何动态地将变量绑定到INPUT

时间:2016-01-21 05:56:50

标签: angularjs

我在控制器中有一个对象,我从http GET请求得到的值:

$scope.myObj = {

      id1: "1",
      id2: "5",
      id3: "",
      id4: ""
    };

它可以包含任意数量的字段(id...)。但如果id-k不为空,那么id-n n < k也不为空。

我需要绑定到INPUT最后不是对象的空字段。什么是最好的方法呢?

这是plnkr

更新:此对象是分类器中的位置。 在我的示例中,ID的位置为1.5。我需要允许仅编辑分类中的最后位置。用户可以将5更改为67或其他任何内容,但不能更改1

如果对象是

$scope.myObj = {

          id1: "2",
          id2: "5",
          id3: "4",
          id4: "8"
        };

分类为2.5.4.8,用户必须只能编辑最后一段 - 8

2 个答案:

答案 0 :(得分:1)

<强>控制器

Id

<强> HTML

...
$scope.myObj = {
  id1: "1",
  id2: "5",
  id3: "6",
  id4: ""
};

$scope.segments = Object.keys($scope.myObj)
  .filter(function(key) {
    return $scope.myObj[key];
  })
  .sort(function(a, b){
    return Number(a.replace('id', '')) - Number(b.replace('id', ''));
  });
 ...

Plnkr - https://plnkr.co/edit/8C9lLLdCvvzFinaOXqtd?p=preview

原始答案

您可以计算控制器中的最后一个非空白ID,并将其设置为范围变量。像

这样的东西
<span ng-repeat="segment in segments">
   <span ng-if="!$last">{{ myObj[segment] }}</span>
   <input ng-if="$last" ng-model="myObj[segment]">
</span>

<p>{{ myObj }}</p>

注意 - 您不能依赖键的顺序,因此您实际上不能假设最后一个键是最大键。

Plnkr - https://plnkr.co/edit/apy8qZNJNK4Q23J5Ja4N?p=preview

答案 1 :(得分:0)

  

我需要绑定到INPUT ..

所以看来,你所拥有的是一个没有的对象列表。列表中的元素可能会有所不同..并且您希望将所有元素绑定到<input>

如果是这样,那就可以胜任:

<div ng-init="tempName = key" ng-repeat="(key, value) in myObj">
    <label for="{{key}}" >{{key.toUpperCase()}}</label>
    <input name="{{key}}" id="{{key}}" type="text" ng-model="myObj[tempName]" />
</div>

这是一个很棒的plunkr正在做那个

修改

忽略空字段:use this