ng-repeat不使用数组

时间:2015-08-04 15:47:07

标签: javascript angularjs

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

迭代1:

空白

迭代2:

第1项

第2项

迭代3:

[" Item1"," Item2"]

第3项

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

这是Angular控制器代码:

     $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>

非常感谢任何和所有帮助。

2 个答案:

答案 0 :(得分:2)

问题在于,在第一遍中,您将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;
            }
        })
    };

答案 1 :(得分:1)

在数组中添加新项的方法如下。使用:

$scope.addedStates.push(data);

而不是:

if (pass == 0) {
    $scope.addedStates = data;
    pass = pass + 1;
}
else {

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