$ scope更新后,ng-repeat不更新信息

时间:2016-05-15 13:59:49

标签: javascript angularjs angularjs-ng-repeat

我有一个ng-repeat,它会创建一个带有一些起始数据的表单。然后用户可以自由修改所述数据,并且更改应该出现在表单中。在此之前,用户提交的数据将被另一个函数清理,该函数由按钮上的ng-click调用。

一切运作良好(我检查了$scope.some_arrayng-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()})作为我函数的最后一行,但输出仍然是相同的。

1 个答案:

答案 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"]);
};

更多信息:https://docs.angularjs.org/api/ng/directive/ngModel