如何修复Angular与EJS的for循环代码,实现数据库no列值遍历
问题分析与修复方案
你现在的核心问题是混淆了后端EJS模板渲染和前端AngularJS数据绑定的执行时机,导致代码逻辑完全冲突,下面一步步给你解决:
为什么之前的代码会异常?
- EJS是在服务器端执行渲染的,这时候AngularJS的
{{}}插值表达式还没有被解析(Angular是在客户端浏览器里运行的),所以你写的<% for (var i=0; i < {{gridOptions4[i].name}}; i++) { %>完全无效——服务器根本不知道gridOptions4是什么,循环条件直接报错。 - 就算循环能跑,你模板里一直用
gridOptions4[0],只会重复渲染第一个元素,根本没遍历所有数据。
正确的修复方式
因为你的数据是通过AngularJS的$http从后端异步获取的,应该用Angular的前端指令来处理循环,彻底移除EJS的for循环:
步骤1:优化AngularJS控制器代码
把获取到的数据赋值给更清晰的变量名,方便模板使用:
var app = angular.module('myApp', []); app.controller('BasicCtrl20', function($scope, $http) { $http.get("/concept_db") .then(function(response) { // 将后端返回的数据集赋值给$scope.items,供模板遍历 $scope.items = response.data; }); });
步骤2:修改EJS模板(改用Angular的ng-repeat)
用Angular的ng-repeat指令遍历数据,并且绑定每个元素的对应属性:
<!-- 使用ng-repeat遍历$scope.items数组,item代表当前循环的每一项 --> <div ng-repeat="item in items" class="{{item.class}}"> <div class="gallery-item"> <a href="{{item.main_href}}"> <div class="gallery-item-image"> <img ng-src="{{item.imgsrc}}"> </div> </a> <div class="gallery-item-description"> <p align="center">{{item.name}}</p> </div> </div> </div>
额外说明
- 如果你想获取
no列的所有值,在Angular控制器里可以通过$scope.items.map(item => item.no)来提取,或者在模板里用{{item.no}}直接显示。 - 永远记住:EJS负责服务器端的初始渲染,AngularJS负责客户端的动态数据绑定和交互,两者不要混写逻辑,否则会因为执行时机不同导致各种异常。
内容的提问来源于stack exchange,提问作者鞝勳頊�,angularjs;ejs"
相关产品推荐
相关产品推荐

