在 Angular JS 1.2.x 而不是 1.3.x 中工作的二维数组

2D arrays working in Angular JS 1.2.x and not in 1.3.x

我想在 Angular 中为二维数组编写一个简单的循环,如下所示:

<!DOCTYPE html>
<html ng-app="">
  <head>
    <meta charset="ISO-8859-1">
    <title>Angular 2D Demo</title>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.14/angular.min.js"></script>
    <script type="text/javascript">
      var TableCtrl = function($scope) {
        $scope.data = [
          ["val-11", "val-12", "val-13"],
          ["val-21", "val-22", "val-23"]
        ];
      }
    </script>
  </head>
  <body>
    <table ng-controller="TableCtrl">
      <tr ng-repeat="row in data">
        <td ng-repeat="col in row">{{col}}</td>
      </tr>
    </table>
  </body>
</html>

这段代码工作正常。

但是,如果使用的 angular 版本更改为 1.3.x,我在浏览器调试控制台上收到错误消息:

Error: [ng:areq] http://errors.angularjs.org/1.3.14/ng/areq?p0=TableCtrl&p1=not%20a%20function%2C%20got%20undefined
    at Error (native)
    at https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js:6:417
    at Sb (https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js:19:510)
    at tb (https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js:20:78)
    at $get (https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js:75:331)
    at https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js:57:65
    at s (https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js:7:408)
    at A (https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js:56:443)
    at g (https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js:51:299)
    at g (https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js:51:316)

我需要更改我的数据声明的语法还是需要更改其他内容?

错误与未定义的控制器有关。您需要使用 .controller() 来声明控制器,因为您使用的是 angular 1.3

var TableCtrl = function($scope) {
        $scope.data = [
          ["val-11", "val-12", "val-13"],
          ["val-21", "val-22", "val-23"]
        ];
      }

angular.module("app",[])
.controller("TableCtrl",function($scope) {
        $scope.data = [
          ["val-11", "val-12", "val-13"],
          ["val-21", "val-22", "val-23"]
        ];
      })

在html中:

 <html ng-app="app">..........</html>

按照@NewDev 的建议,在模块上定义控制器。

在配置阶段 $controllerProvider 上执行 allowGlobals

Angular Changelog

angular.module('myModule').config(['$controllerProvider', function($controllerProvider) {
  // this option might be handy for migrating old apps, but please don't use it
  // in new ones!
  $controllerProvider.allowGlobals();
}]);

不是二维数组不起作用——这是一个全局控制器函数。这在 1.3 中是不允许的(默认情况下)。您需要显式注册一个 .controller:

var app = angular.module("myApp", []);

app.controller("TableCtrl", function TableCtrl($scope){
  // whatever you currently have
});

您还需要明确说明应用名称:

<html ng-app="myApp">
   ...
</html>

(此外,如果您使用非压缩 Angular,它会给您更多描述性的错误消息。)