在 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.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,它会给您更多描述性的错误消息。)
我想在 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.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,它会给您更多描述性的错误消息。)