javascript - ng-repeat 不适用于数组

标签 javascript angularjs

我是 AngularJs 和 Javascript 的新手,所以我会尽力解释这个问题。我的 Angular Controller 从我的 MVC Controller 中的方法接收数据。每次运行脚本时,MVC Controller 都会返回 1 个项目。每次在无序列表中使用 ng-repeat 返回新项目时,我都试图动态扩展我的 html 页面中的项目列表。当我使用 ng-repeat 时,第一项不会显示,直到添加第二项然后它们一起显示。如果我添加第三个项目,这些项目会奇怪地显示。这是使用 ng-repeat 进行迭代的示例:

迭代 1:

空白

迭代 2:

项目 1

项目 2

迭代 3:

["项目 1", "项目 2"]

项目 3

第三次迭代从字面上显示了括号和引号,而不是无序列表的项目符号。谁能告诉我发生了什么事?

这是 Angular Controller 代码:

     $scope.addState = function () {
        //debugger;
        companyService.addState($scope.form)
        .success(function (data) {
            if (pass == 0) {
                $scope.addedStates = data;
                pass = pass + 1;
            }
            else {

                addedStates = [
                    angular.copy($scope.addedStates),
                    data

                ];
                $scope.addedStates = addedStates;

            }
            $scope.rmgStates = $scope.rmgStates - 1;

            if($scope.rmgStates == 0)
            {
                $scope.canSubmit = true;
                $scope.lastState = false;
            }
            else {
                $scope.canSubmit = false;
                $scope.lastState = true;
            }
        })
    };

这是html代码:

                        You have added the following States:<br />
                    <ul>
                        <li ng-repeat="item in addedStates">
                            {{item}}
                        </li>
                    </ul>

非常感谢任何帮助。

最佳答案

问题是,在第一遍中,您将 addedStates 设置为添加的单一状态——因为 ng-repeat 期望和数组,它没有显示任何内容。在第一次之后的传递中,您采用了先前添加的状态,用一个数组将其包装起来,然后将其与新状态一起插入到一个数组中,因此每次都会更深一层——这就是为什么它第二次显示正确格式的原因, 但第三个是数组中的数组。

相反,您应该初始化并清空数组,并在每次成功请求添加状态时,将新状态推送到现有数组中。

试试这个:

$scope.addedStates = [];

$scope.addState = function () {
        //debugger;
        companyService.addState($scope.form)
        .success(function (data) {
            $scope.addedStates.push(angular.copy(data));
            $scope.rmgStates = $scope.rmgStates - 1;

            if($scope.rmgStates == 0)
            {
                $scope.canSubmit = true;
                $scope.lastState = false;
            }
            else {
                $scope.canSubmit = false;
                $scope.lastState = true;
            }
        })
    };

关于javascript - ng-repeat 不适用于数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31813751/

相关文章:

javascript - Angular JS : validating duplicate object key in table

javascript - 在这个 vuejs 演示中如何传递参数?

javascript - 正则表达式或其他方式转换为 JavaScript 中的驼峰式大小写

javascript - 如何使用 jQuery 检查是否存在具有特定名称 attr 的输入

javascript - requirejs:我可以要求一个全局运行时变量吗?

javascript - Gulp Angular 文件排序错误

javascript - 用 Mongoose 插入子数组

javascript - 在 Angular JS 中观察全局对象的属性

angularjs - 如何使用 Protractor 检查元素是否可见?

javascript - 将两个数组绑定(bind)到一组复选框中 - angularjs