我在控制器中有一个对象,我从http GET请求得到的值:
$scope.myObj = {
id1: "1",
id2: "5",
id3: "",
id4: ""
};
它可以包含任意数量的字段(id...
)。但如果id-k
不为空,那么id-n
n < k
也不为空。
我需要绑定到INPUT
最后不是对象的空字段。什么是最好的方法呢?
这是plnkr
更新:此对象是分类器中的位置。
在我的示例中,ID
的位置为1.5
。我需要允许仅编辑分类中的最后位置。用户可以将5
更改为6
,7
或其他任何内容,但不能更改1
段
如果对象是
$scope.myObj = {
id1: "2",
id2: "5",
id3: "4",
id4: "8"
};
分类为2.5.4.8
,用户必须只能编辑最后一段 - 8
。
答案 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