Angularjs разрешает обновления данных только для первых строк - PullRequest
0 голосов
/ 10 июня 2018

У меня есть код, который отображает три строки информации из json с помощью angularjs.

Теперь я хочу, чтобы любые значения, введенные во входные данные формы, соответствующие этим строкам, заменили уже существующие значения в представлении для этогоряды.

Например.В строке 1 у меня есть значение hello sub 1 для подкоммента Переменная.Теперь я хочу, если я введу другое значение, скажем New sub 1 в форме ввода для этого, оно заменит / обновит уже существующие значения в ** угловом представлении ** для этих строк.

Проблема с кодом выше состоит в том, что он продолжает заменять / обновлять только значения подкоммента первой строки каждый раз, когда вводится новый подкоммент.независимо от того, какая кнопка сохранения была нажата

Я не знаю, есть ли проблема в строке кода ниже

$scope.posts[index].comment[0].subcomment = subcomment;

ниже - весь частично работающий код, который сохраняетобновление только первой строки независимо от того, какая кнопка отправки была нажата

html

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<body ng-app="test" ng-controller="testCtrl">
    <div ng-repeat='post in posts'>
        <b>Post Title:</b> {{ post.title }}
        <div ng-repeat='comment in post.comment'>
            <br>
            <b>sub comment</b>: {{comment.subcomment}}
            <div>
                <table>
                    <tr>
                        <tr>
                            <td>Enter subcomment</td>
                            <td>
                                <input type='text' ng-model='subcomment' placeholder="Enter Value For subcomment and Save.">
                            </td>
                        </tr>
                        <tr>
                            <td>&nbsp;</td>
                            <td>
                                <input type='button' id='but_save' value='Save and Replace/Update' ng-click='setResponse4(post.id,1,$index,subcomment,comment.id)'>
                            </td>
                            <td>
                                <input type='button' style="display:none" ng-init='getComments1(comment.id,5)'>
                            </td>
                        </tr>
                </table>
            </div>
        </div>
        <hr style="width:100%;font-size:10">
    </div>
</body>

js

var app = angular.module('test', []);


app.controller('testCtrl', function ($scope, $http) {
    $scope.posts = [
        {
            "id": "1",
            "title": "my first title.",
            "comment": [
                {
                    "subcomment": "Hello sub 1"
                }
            ]
        },
        {
            "id": "2",
            "title": "my second title.",
            "comment": [
                {
                    "subcomment": "Hello sub 2"
                }
            ]
        },
        {
            "id": "3",
            "title": "my third title.",
            "comment": [
                {
                    "subcomment": "Hello sub 3"
                }
            ]
        }
    ];

    //initialize an arrays of  comments
    $scope.commenting = [];

    $scope.setResponse4 = function (postid, type, index, subcomment, commentid) {
        var subcomment = subcomment;
        alert(subcomment);
        $scope.posts[index].comment[0].subcomment = subcomment;
    }
});

Снимок экрана прилагается enter image description here

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

Проблема в вашем коде в том, что у вас есть 2 ng-повторения, и $ index пропускает индекс внутреннего ng-повторения, тогда как вам нужен индекс внешнего ng-повторения, если вы изменяете свой код, чтобы получить индекс внешнего ng-повторите это следующим образом, это должно решить вашу проблему.

1) Сначала добавьте этот ng-init к вашему внешнему ng-repeat

<div ng-repeat='post in posts track by $index' ng-init="outerIndex=$index">

2) используйте outerIndex в вашей функции сохранения

<input type='button' id='but_save' value='Save and Replace/Update' ng-click='setResponse4(post.id,1,outerIndex,subcomment,comment.id)'>

Демо

0 голосов
/ 10 июня 2018

Да, как говорит код, вы получаете доступ только к определенному индексу массива и устанавливаете значение 0-го элемента,

$scope.posts[index].comment[0].subcomment = subcomment;

, чтобы установить все значения, которые вы можете использовать angular.forEach

angular.forEach($scope.posts[index].comment, function(value, key){
   value.subcomment = subcomment;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...