在我定义的打字稿中:
class SubjectService implements ISubjectService {
subject: any;
subjectId: number = 0;
subjects = {
"1": { "id": 1, "name": "Java" },
"100": { "id": 100, "name": "Test" }
};
static $inject = [
"$http",
"appConstant",
];
constructor(
public $http: ng.IHttpService,
public ac: IAppConstant
) {
}
}
然后我在构造函数中有这段代码:
class SubjectController {
static $inject = [
"$scope",
"subjectService"
];
constructor(
public $scope,
public su: ISubjectService
) {
$scope.su = su;
$scope.rowClicked = (subject, $index) => {
var self = this;
if (subject.current && subject.current == true) {
return;
}
su.subjects.forEach(function (subject) {
subject.current = false;
});
su.subject = subject;
su.subject.current = true;
}
}
}
但是当这个运行时,我收到一条消息说:
TypeError:su.subjects.forEach不是函数 在Scope.SubjectController。$ scope.rowClicked(http://localhost:1810/app/controllers/SubjectController.js:12:25)
有没有人知道可能出错的地方。我在其他地方使用了类似的代码,但每次都失败了。
答案 0 :(得分:2)
subjects
是Object
,而不是Array
,因为它有{}
符号。如果您愿意使用1
,则可以循环显示100
和Object.keys(subjects)
作为键。您也可以将其作为空数组[]
)启动,然后根据需要设置subjects[1]
和subjects[100]
的值,但是没有简写内联方式定义一个没有inbetween的数组的两个分离索引。
答案 1 :(得分:1)
su.subjects
是一个对象,不是数组,forEach
未定义Object
。
答案 2 :(得分:0)
我还要注意,forEach
并未在所有版本的浏览器中实现(看着你,IE 8),因为直到ECMA 5.1才包括forEach
。见forEach