javascript - 如何使用请求回调函数内部的 Angular 创建表

标签 javascript html angularjs

我正在尝试使用 Angular 创建一个表格。问题是我需要根据 http 请求的 JSON 响应创建该表(此时我调用下面的 responseHandler 函数:

function call(){
    $.ajax({
        url: url
        , type: "GET"
        , success: function (response, status, xhr) {

            responseHandler(response);
        }
        , error: function (xhr, status, error) {}
    });
}

 function responseHandler(response) {
    var data = angular.fromJson(response);
    var user = angular.fromJson(data['users']);
    userdata = user['data'];// this is correctly assigning the data I 
                                // need to the variable userdata
    var tApp = angular.module('tApp', []);
    tApp.controller('tCtrl', ['$scope', function ($scope) {

        $scope.userdata = userdata;
        $("#usertable").css("visibility", "visible");
    }]);
 }

这是我的 html:

<div ng-app="tApp" ng-controller="tCtrl" class="tab-content clearfix" id='tCtrl'>
<table id='usertable' border="1">
                        <tr ng-repeat="x in userdata">
                            <td>{{x.name}}</td>
                            <td>{{x.id}}</td>
                            <td>{{x.picture.data.url}}</td>
                        </tr>
                    </table>
</div>

我不断收到 angular.js:14516 Error: [$controller:ctrlreg] 错误。 所以看来我的 Controller 没有被 Angular 识别。有什么想法吗?

谢谢!

最佳答案

如果您正在使用 Angular,您应该完全停止使用 JQuery,由于 Angular 的摘要循环,异步 Ajax 调用会严重扰乱您的应用程序。

将数据获取拆分到不同的服务中也是一种最佳实践,因为它有时会很快变得困惑,并且会用大量没有应用程序逻辑的代码污染 Controller 。

并且因为您不使用 JQuery,所以不需要将 ID 放置在元素中。

HTML:

<div ng-app="tApp" ng-controller="tCtrl" class="tab-content clearfix">
  <table border="1" ng-show="userdata.length > 0">
    <tr ng-repeat="x in userdata">
      <td>{{x.name}}</td>
      <td>{{x.id}}</td>
      <td>{{x.picture.data.url}}</td>
    </tr>
  </table>
</div>

Javascript

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

tApp.factory('dataFetchingService', ['$http', function ($http) {
  return {
    getUserData: function() {
      $http.get('/someUrl/to/userData')
        .then(
          response => response.data,
          error => console.error(error)
        );
    }
  };
}]);

tApp.controller('tCtrl', ['$scope', 'dataFetchingService', function ($scope, dataFetchingService) {
    $scope.userdata = [];

    dataFetchingService.getUserData().then(userData => {
      $scope.userdata = userData;
    });
}]);

关于javascript - 如何使用请求回调函数内部的 Angular 创建表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43153911/

相关文章:

javascript - 删除 Javascript 中特定字符之间的所有内容

javascript - 绝对容器滚动容器中的 Hammer.js 元素

javascript - 执行功能的滚动条高度指示器

javascript - AngularJS - 如何将侧边菜单 html 代码放入外部模板文件

javascript - 使用 JQLite 如何在选择框中选择一个或多个项目

javascript - 动态生成的元素触发的事件不起作用

javascript - Angular 2 Google 放置自动完成事件监听器不响应

iphone - 在 iPhone 上禁用表单字段的预测文本

html - Flex 导航栏中的下拉菜单推送内容

javascript - AngularJS - 无法在 View 中访问检索到的 JSON 数据