AngularJS ng-repeat未显示表数据

时间:2014-06-06 17:03:11

标签: javascript angularjs ng-repeat ngtable

我的控制器从spring应用程序数据中提取数据,但不会以表单形式显示。当我在数据中加入常量时,它可以很好地工作。

这是我在JS控制器中的代码

sampleApp.controller('searchCourseController', ['$scope', '$http',
        function($scope, $http,  $routeParams, ngTableParams ) {
         $scope.courses = {};            

        $scope.searchButton=function () {
            var actionUrl = 'searchCourse';

            var textToSearch = $("#txtTitle").val();
            if (textToSearch.length == 0) {
                alert("Please provide search criteria. Blank search is not allowed");
                /* $("#loader-overlay").fadeOut();
                $("#bg-loader").fadeOut(); */
                return;
            }

            $http.get(actionUrl+"?title="+escape(textToSearch))
            .success(
                function(data, status, headers, config) {
                    $scope.courses = data;
                    console.log($scope.courses);
                })
            .error(
                function(data, status, headers, config) {
                });
        };

        $scope.editCourseButton=function () {
            alert ("edit");
        };

    }]);

和我正在使用的html显示数据

<table class="table">
                                <thead>
                                   <tr>
                                      <th>Course Name</th>
                                      <th>Status</th>
                                      <th class="hidden-xs">Publishing status</th>
                                      <th class="hidden-xs">Group Name</th>
                                      <th class="hidden-xs">Rating</th>
                                   </tr>
                                </thead>
                                 <tbody>
                                   <tr ng-repeat="course in $scope.courses">
                                      <td>{{course.name}}</td>
                                      <td>{{course.courseStatus}}</td>
                                      <td>{{course.coursePublishStatus}}</td>
                                      <td>{{course.courseGroupName}}</td>
                                      <td>{{course.courseRating}}</td>
                                   </tr>
                                </tbody>
                             </table>

可能是什么问题,因为具有固定数据的相同代码会在没有问题的情况下显示在数据表中。

感谢,

3 个答案:

答案 0 :(得分:1)

您无法在视图中指定$ scope,因为它未定义:

<tr ng-repeat="course in $scope.courses">

变为

<tr ng-repeat="course in courses">

答案 1 :(得分:0)

除了省略ng-repeat中$ scope.courses的$ scope之外,您可能希望在$ http.get成功回调中使用$ scope。$ apply()来更新范围。这将在异步进程之后将视图更新为更新的$ scope.courses绑定。

示例:

$http.get(actionUrl+"?title="+escape(textToSearch))
 .success(function(data, status, headers, config) {
                $scope.courses = data;

                $scope.$apply(); // used $scope.$apply() to update the scope.
                console.log($scope.courses);
            })
        .error(
            function(data, status, headers, config) {
            });
  });

答案 2 :(得分:0)

在ng-change上调用搜索功能,如下所示

<input class="form-control" type="text" placeholder="Title" id="txtTitle" ng-change="search()" ng-model="txtToSearch">

解决了这个问题。但我仍然试图找出它为什么不在搜索按钮上工作。也改变搜索控制器,这里是代码

function SearchCtrl($scope, $http, $location, CS) {
$scope.search = function() {  
    $scope.result = null;
    $http({method: 'GET', url: '/search?title=' + $scope.txtToSearch }).
        success(function(data, status, headers, config) {
            $scope.results = data;
        }).
        error(function(data, status, headers, config) {
            $scope.status = status;
        });     
};

$scope.edit=function(c)
{
    CourseService.set(course);
    $location.path('/edit');
}



}