AngularJS函数传参报错:TypeError读取undefined属性'0'求助
问题分析与修复方案
让我帮你梳理下代码里的几个关键问题,正是这些问题导致了你遇到的TypeError:
1. 函数参数与$scope变量的混淆
你定义的someVar函数明明接收了parameter参数,但函数内部却错误地去访问$scope.parameter——这个变量在你的代码里根本没有定义,所以它是undefined,自然无法读取[this.$index]属性,这就是报错“Cannot read property '0' of undefined”的直接原因。
你应该直接使用传入的parameter参数(或者更语义化的命名,比如testItem),而不是去$scope上找一个不存在的变量。
2. HTML调用的函数名不匹配
你在HTML里写的是ng-click="template(emails)",但你在控制器里定义的函数是$scope.someVar,函数名完全对不上!这会导致点击链接时根本找不到要执行的函数,即使前面的问题修复了也无法正常运行。
3. ng-repeat中传递的参数错误
你的ng-repeat是遍历tests数组,每个循环项是test,但你点击时传递的是emails,这显然不是当前循环项的数据。你需要把当前的test对象传给函数,这样函数才能拿到正确的toCheck属性进行判断。
修正后的代码
控制器代码
$scope.someVar = function(testItem) { // 直接使用传入的当前循环项testItem if (testItem.toCheck === 'false') { $scope.anotherVar = '.'; } else { $scope.anotherVar = ', to check with you if it has worked.'; } };
HTML代码
<a href="#" ng-repeat="test in tests" ng-click="someVar(test)">Link</a>
额外建议
如果你的toCheck属性实际是布尔值(而不是字符串'false'),那判断条件应该改成!testItem.toCheck,这样更符合布尔值的判断逻辑,避免字符串与布尔值混淆的潜在问题:
if (!testItem.toCheck) { $scope.anotherVar = '.'; } else { // ... }
内容的提问来源于stack exchange,提问作者Serge Inácio
相关产品推荐
相关产品推荐

