gpt4 book ai didi

angularjs - 通过工厂服务获取时,ng-repeat 不显示数据

转载 作者:行者123 更新时间:2023-12-03 17:39:18 26 4
gpt4 key购买 nike

需要帮助来理解我的错误/在页面上显示数据。

我几乎在论坛上回答了“ng-repeat not working”的所有问题。但仍然无法找到答案。

(请注意:我第一次尝试通过使用 $http 创建工厂服务来获取数据)

请看一下我下面的 JavaScript 代码(模块、 Controller 和工厂定义在一个地方)

    //App declaration
var myApp = angular.module("appLeadsLogRpt", []);

//Controller declaration
myApp.controller('controllerLeadsLogRpt', ['dataService', fncontrollerLeadsLogRpt]);

function fncontrollerLeadsLogRpt(dataService) {
var vm = this;

//Table headers
vm.TableHeaders = ["Lead Id", "Source", "Create Date", "Status", "Contact Id", "Customer Name", "AssignedTo", "Mail Content", "Closed Reason", "Last Lead Note"];

dataService.getAllData()
.then(getData,null)
.catch(showError);

function getData(data) {
vm.LeadsLogRptData = JSON.parse(data);
//console.log(JSON.parse(data));
}
function showError(errMsg) {
console.log(errMsg);
}
}

//Factory Service to fetch data
myApp.factory('dataService', ['$http', DataService]);

function DataService($http) {
return {
getAllData: GetAllData
};

function GetAllData() {
return $http({
method: 'get',
url: 'DataHandler.ashx?method=leadsReport&listId=504473'
})
.then(sendResponseData)
.catch(sendError)
}

function sendResponseData(response) {
return response.data;
}
function sendError(response) {
return response.status;
}
}

</script>

我的HTML如下:
<div id="DvContent" style="width:100%" data-ng-app="appLeadsLogRpt">
<div style="width:100%;" data-ng-controller="controllerLeadsLogRpt as vm1">
<input type="text" id="txtJsonData" value='<%=jsonLeadsLogRpt %>' style="display:none" />

<div><h3>Leads Log Report</h3></div>
<div style="text-align:right;margin-bottom:2px;padding-right:2px;">
<a href="javascript:void(0);" data-ng-click="ExportToExcel();"><img src="/mp_images/excelicon.gif" border=0 width=22 height=22 alt="Open in Excel"></a>
</div>
<div id="divExportToExcel">
<table style="width:100%" id="tblLeadLogRpt" class="table table-bordered">
<thead>
<tr style="background-color:#CCCCCC">
<th data-ng-repeat="item in vm1.TableHeaders" class="ng-cloack">{{item}}</th>
</tr>
</thead>
<tbody>
<tr data-ng-repeat="item1 in vm1.LeadsLogRptData">
<td class="ng-cloack">{{item1.A_LeadId}}</td>
<td class="ng-cloack">{{item1.B_Source}}</td>
<td colspan="8"></td>
</tr>
<tr data-ng-if="LeadsLogRptData.length==0"><td colspan="10">Data Not Found</td></tr>
</tbody>
</table>
</div>
</div>
</div>

如果我将服务器返回的硬编码数据分配给 ng-repeat 它工作正常

请让我知道我做错了什么。

还有一个问题。

在工厂中,我通过调用 $http 的 get 方法来获取数据

如果我想通过 Post 方法调用它,如何传递参数?

在 Jquery 中,我按照以下方式进行操作。
    $.ajax({
url: 'AbcdHandler.ashx',
type: 'POST',
data: {
'method': 'ABCData',
'StartDate': startDate,
'EndDate': endDate
},
success: function (result) {
return JSON.parse(result);
},
error: OnError
});

提前感谢您的阅读和帮助。

我的最新观察:

当我在控制台上写数据时,得到了这个。 (看看函数 getData(data))

[{"A_LeadId":"426429","B_Source":"LabX"},{"A_LeadId":"429369","B_Source":"LabX"},{"A_LeadId":"430586","B_Source": "信息"},{"A_LeadId":"430589","B_Source":"Info"},{"A_LeadId":"433848","B_Source":"LabX"},{"A_LeadId":"448592", "B_Source":"Info"},{"A_LeadId":"451795","B_Source":"Bid"},{"A_LeadId":"453008","B_Source":"Low Bid"},{"A_LeadId":"453009","B_Source":"Low Bid"},{"A_LeadId":"453010","B_Source":"Low Bid"},{"A_LeadId":"455736","B_Source":"信息"},{"A_LeadId":"455743","B_Source":"Info"},{"A_LeadId":"457030","B_Source":"Info"},{"A_LeadId":"457052","B_Source":"LabX"},{"A_LeadId":"461503","B_Source":"手动输入"}]

如果我复制它并直接分配给 vm.LeadsLogRptData,系统会在屏幕上正确显示我的输出。
例如vm.LeadsLogRptData = [{"A_LeadId":"426429","B_Source":"LabX"},......];

还有一件事。当我检查数据长度时,它显示为 621。 ({{vm.LeadsLogRptData.length}})

实际上只有 15 个大括号对 ({}),系统应该显示我的长度为 15

希望我能正确解释/描述我的问题。

(需要一些能够以 Json 格式正确转换我的数据的东西)

谢谢,

我得到了答案

只需将 eval 与 Json.parse 一起使用,系统就会开始正确显示数据
例如vm.LeadsLogRptData = eval(JSON.parse(data));

有人请解释一下这背后的逻辑吗?

感谢到目前为止阅读和回复的每一个人。

最佳答案

也许您应该使用 $http 对象的 params 属性,例如:

function GetAllData() {                
return $http({
method: 'GET',
url: 'http://localhost:12345/DataHandler.ashx',
params: {method: "leadsReport", listId: 504473}
})
.then(sendResponseData)
.catch(sendError)
}

如果你想执行 POST 请求,你应该像这样使用它:
function PostData() {                
return $http({
method: 'POST',
url: 'http://localhost:12345/DataHandler.ashx',
data: {exampleData: exampleData}
})
.then(sendResponseData)
.catch(sendError)
}

记得改 http://localhost:12345/为您的服务器 URL。

关于angularjs - 通过工厂服务获取时,ng-repeat 不显示数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40154786/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com