我有一个ng-repeat
,它会创建一个带有一些起始数据的表单。然后用户可以自由修改所述数据,并且更改应该出现在表单中。在此之前,用户提交的数据将被另一个函数清理,该函数由按钮上的ng-click
调用。
一切运作良好(我检查了$scope.some_array
,ng-repeat
从中获取数据并且新数据位于正确的位置)但页面上没有任何内容。
元素:
<li ng-repeat="field in some_array" id="field-{{$index}}">
<div class="{{field.field_color}}">
<button type="button" ng-click="save_field($index)">done</button>
{{field.nice_name}}
</div>
<div id="field-input-{{$index}}">
<input type="text" id="{{field.tag}}" value="{{field.content}}">
<label for="{{field.tag}}">{{field.nice_name}}</label>
</div>
</li>
save_field
代码:
$scope.save_field = function (index) {
console.log($scope.some_array[index]["content"])
var value = $("#field-" + index).children("div").children("input").val()
var name = $scope.some_array[index]["name"]
var clean_value = my_clean(value)
if (norm_value === "") {
return
}
$scope.some_array[index]["content"] = clean_value
console.log($scope.some_array[index]["content"])
}
在控制台上我看到:
10.03.16
10/03/16
哪个是对的,但在表单中我只看到10.03.16
。我已经尝试将$timeout(function(){$scope.$apply()})
作为我函数的最后一行,但输出仍然是相同的。
答案 0 :(得分:1)
如果要将变量绑定到它,则不应使用此类输入。摘要循环将刷新值,但不会明显更新,因为这不是HTML本机行为。
使用ng-model,它将按预期更新输入的视图值:
<input type="text" id="{{field.tag}}" ng-model="field.content">
同样使用ng-model,当用户修改输入时,你的变量会被更新,所以你可以在save_field函数中检索它以更容易地做一些处理,而不需要jQuery:
$scope.save_field = function (index) {
if (norm_value === "") {
return;
}
$scope.some_array[index]["content"] = my_clean($scope.some_array[index]["content"]);
};