AngularJS报错:无法在数字'1'上创建'subjects'属性及选课学科选择问题
解决AngularJS中"Cannot create property 'subjects' on number '1'"的问题
嘿,这个问题我太熟悉了!咱们直接说根源:你把课程选择的ng-model绑定成了数字类型的课程ID,却试图给这个数字添加subjects属性——数字类型根本不支持新增属性,这就是报错的原因!
问题出在哪?
看你课程选择的下拉框代码:
<select ng-model="course" class="form-control" ng-options="course.IdCourse as course.Name for course in courses track by course.IdCourse"> </select>
这里的course.IdCourse as course.Name意味着,当你选择某门课程时,$scope.course会被赋值为course.IdCourse(也就是一个数字,比如报错里的1),而不是完整的课程对象。
当你没选课程时,course是undefined,这时候course.subjects不会触发报错;但一旦选中课程,course变成了数字,再想给它绑定多选的学科(也就是给数字加subjects属性),浏览器自然会抛出"Cannot create property 'subjects' on number"的错误。
解决方案
把课程选择的ng-options改成绑定整个课程对象,而不是只绑定ID。这样$scope.course就是一个对象,就能正常添加subjects属性来存储多选的学科了。
修改后的课程选择下拉框代码:
<div class="form-group"> <label>Select Course</label> <select ng-model="course" class="form-control" ng-options="course as course.Name for course in courses track by course.IdCourse"> </select> </div>
核心变化是把course.IdCourse as改成了course as,这样ng-model绑定的是完整的课程对象,而不是单个ID数字。
额外说明
- 修改后,当你需要获取课程ID用于提交表单等操作时,直接用
course.IdCourse就可以,完全不影响业务逻辑。 - 学科选择的代码无需改动,现在
course.subjects会正常绑定多选的学科ID数组,和angular-chosen插件的兼容性也没问题。
内容的提问来源于stack exchange,提问作者Junaid Farooq
相关产品推荐
相关产品推荐

