Angularjs позволяет обновлять одну (первую) строку для комментариев к каждому посту. - PullRequest
0 голосов
/ 12 июня 2018

Angularjs имеет проблемы с обновлением каждого подкомитета / подпоста введенных данных.

У меня есть файл json, который содержит две записи . Первое сообщение содержит ** три ** подпункта (подкоммента), каждый с кнопкой обновления. второй пост содержит два подпункта (субкоммента) каждый с кнопкой обновления.

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

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

Например, в post 1 . Если вы введете значение в первой строке и подтвердите, он обновит уже существующие {{comment.subcomment}} данные первой строки.Если вы введете в строку 2 для того же сообщения 1 , он обновит первый ряд сообщения 1 вместо второго ряда этого сообщения.

Некоторые ученые Stackoverflow, такие как NTP в ссылке ниже Angularjs разрешает обновления данных только для первых строк

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

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

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

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

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

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

ниже - код

js

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

app.controller('MainCtrl', function ($scope) {
    $scope.name = 'World';
    $scope.posts = [
        {
            "id": "1",
            "title": "my first post title.",
            "comment": [
                {
                    "subcomment": "post 1 subcomment 1", "status": "**working**"
                },

                {
                    "subcomment": "post 1 subcomment 2", "status": "**Not working**"
                },

                {
                    "subcomment": "post 1 sub comment 3", "status": "**Not working**"
                }
            ]
        },
        {
            "id": "2",
            "title": "my second post title.",
            "comment": [
                {
                    "subcomment": "post 2 subcomment 1", "status": "**working**"
                },

                {
                    "subcomment": "post 2 subcomment 2", "status": "**Not working**"
                }
            ]
        }
    ];
    $scope.setResponse4 = function (postid, type, index, subcomment, commentid) {
        var subcomment = subcomment;
        $scope.posts[index].comment[0].subcomment = subcomment;
    }
});

html

<!DOCTYPE html>
<html ng-app="plunker">
<head>
    <meta charset="utf-8" />
    <title>AngularJS Plunker</title>
    <script>document.write('<base href="' + document.location + '" />');</script>
    <link rel="stylesheet" href="style.css" />
    <script data-require="angular.js@1.5.x" src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.11/angular.min.js" data-semver="1.5.11"></script>
    <body ng-controller="MainCtrl">
        <p>Hello {{name}}!</p>
        <div ng-repeat='post in posts track by $index' ng-init="outerIndex=$index">
            <h3>
                <b>Post ID: {{ post.id }}</b>
            </h3>
            <b>Post Title:</b> {{ post.title }}
            <div ng-repeat="comment in post.comment ">
                <br>
                <b>sub comment</b>: {{comment.subcomment}},
                <b>status</b>: {{comment.status}},
                <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>
                                    {{outerIndex}}
                                </td>
                                <td>
                                    <input type='button' id='but_save' value='Save and Replace/Update' ng-click='setResponse4(post.id,1,outerIndex,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>
</html>

1 Ответ

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

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

1) измените вашу функцию setResponse4, чтобы получить индекс внутреннего ng-повторения, и используйтеэтот индекс вместо 0.

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

2) инициализировать innerIndex

<div ng-repeat="comment in post.comment" ng-init="innerIndex = $index">

3) передать innerIndex вашей функции

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

Demo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...