Angularjs 如何将变量动态绑定到输入
我在控制器中有一个对象,我从http GET请求中获取该对象的值:Angularjs 如何将变量动态绑定到输入,angularjs,Angularjs,我在控制器中有一个对象,我从http GET请求中获取该对象的值: $scope.myObj = { id1: "1", id2: "5", id3: "", id4: "" }; 它可以有任意数量的字段(id..)和任意值。但是如果id-k不是空的,那么id-n中的n
$scope.myObj = {
id1: "1",
id2: "5",
id3: "",
id4: ""
};
它可以有任意数量的字段(id..
)和任意值。但是如果id-k
不是空的,那么id-n
中的n
也不是空的
我需要绑定到对象的INPUT
last not empty字段。最好的方法是什么
这是一个
更新:此对象是分类器中的一个位置。
在我的示例中,ID
的位置是1.5
。我需要只允许编辑分类中的最后一个位置。用户可以将5
更改为6
、7
或任何其他内容,但不能更改1
段
如果对象是
$scope.myObj = {
id1: "2",
id2: "5",
id3: "4",
id4: "8"
};
分类为
2.5.4.8
,用户必须只能编辑最后一段-8
控制器
...
$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', ''));
});
...
HTML
<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- 我需要绑定到
输入
看起来,你拥有的是一个对象列表,列表中的元素数量可能会有所不同。。您希望将所有这些绑定到
如果是这样,那么这就可以完成工作:
<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>
{{key.toUpperCase()}}
这是一个很棒的例子
编辑:
要忽略空字段:但是当我在
输入中更改myLast
时,myObj.id2
将保持不变。我更改了你的代码来显示这个。。我似乎误解了这个问题。很抱歉是否或似乎更接近您所寻找的?我不太明白为什么我们要换最后一把钥匙。我以为更新是由值驱动的。不,对不起。我不知道如何更好地解释这一点,但我只想编辑对象的最后一个非空字段。你所有的例子都绑定了新变量,但我的没有。我可以使用您的第一个示例并添加$watch
来绑定两个变量-您的新myLast
和myObj
,但我正在寻找更好的解决方案。我已经更新了我的问题,以解释我的代码的用途。这个如何?(注意,您可以扩展myObj以包含任意多个键)不,我不需要把它们都绑起来。我需要将对象的最后一个非空字段绑定到INPUT
。因此您希望忽略空字段??empty。也不是空的。我需要绑定到一个输入
一个变量
。看看我的代码好的。因此,您需要绑定空字段前面的一个,并且只绑定一个,2。还有,如果有多个空字段呢?然后怎么办呢但是如果id-k不是空的,那么所有的id-n其中n
。所以我总是有:n1,n2,n3,n-k,….
。我需要绑定n-k
。可能有许多空字段。但在空字段之前,我只有一个最后一个字段。
<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>