添加Angular17 Web Components后AngularJS ng-repeat报错求助
问题排查与解决方案
核心原因
错误根源在于<option>标签的ng-value="{{obj}}"用法错误:
- AngularJS的
ng-value指令接受的是表达式绑定,而非插值后的字符串。当你用{{obj}}时,对象obj会被强制转换为字符串[object Object],AngularJS会尝试将这个字符串解析为表达式,从而触发Token 'Object' is unexpected的语法错误。 - 引入Angular 17 Web Components后,浏览器对DOM属性的处理逻辑或AngularJS表达式解析的优先级被改变,导致原本未触发的错误显现。
修复步骤
修正
ng-value绑定:移除插值语法,直接绑定对象表达式
将<option>中的ng-value="{{obj}}"改为ng-value="obj",让AngularJS直接处理对象绑定,避免字符串转换。验证后续逻辑:确保
selectedRemark.value能正确接收对象类型的值,同时handleRemarks()函数处理对象的逻辑保持正常。额外安全检查:如果
getRemarks(obj)返回HTML字符串,需确保在控制器中用$sce.trustAsHtml()处理内容,避免XSS风险,示例代码如下:$scope.getRemarks = function(obj) { return $sce.trustAsHtml(obj.displayText); // 假设obj包含要显示的文本字段 };
修复后的完整代码
<select ng-if="!isOtherRemarkSelected" class="form-control m-1" ng-model="selectedRemark.value" ng-change="handleRemarks()"> <option value="">Select Remarks</option> <option ng-repeat="obj in remarks track by $index" ng-value="obj" ng-bind-html="getRemarks(obj)"> </option> </select>
内容的提问来源于stack exchange,提问作者Arif Khan
相关产品推荐
相关产品推荐

