angularjs-can';t在特定页面上显示json数据
我正在尝试从JSON文件加载数据并显示在我的移动应用程序中。但问题是我无法在member-detail.html上显示JSON数据,其中应该显示特定用户的数据。但是在member-index.html上,这里是所有用户的完整列表,我可以正确地获取json数据 我有两个页面/模板:angularjs-can';t在特定页面上显示json数据,json,angularjs,angularjs-http,Json,Angularjs,Angularjs Http,我正在尝试从JSON文件加载数据并显示在我的移动应用程序中。但问题是我无法在member-detail.html上显示JSON数据,其中应该显示特定用户的数据。但是在member-index.html上,这里是所有用户的完整列表,我可以正确地获取json数据 我有两个页面/模板: 成员索引.html:列出所有成员。链接到member-detail.html。JSON数据在此处正确显示: 成员详细信息.html:单个成员的详细信息。JSON数据未正确显示。在本页中,我实际上只尝试输出以下两个表达
- 成员索引.html:列出所有成员。链接到member-detail.html。JSON数据在此处正确显示:
- 成员详细信息.html:单个成员的详细信息。JSON数据未正确显示。在本页中,我实际上只尝试输出以下两个表达式:
我正在用一个关于file services.js中的$http.get函数的服务加载json数据。还有两种方法->member-index.html(=工作正常)的findAll和member-detail.html的findById->(工作不正常,无法访问json对象,请看这一行:var member=members[memberId-1]): 以下控制器用于member-detail.html:<h2>Name: {{member.firstname }} {{member.lastname}}</h2>
我的去bug工作的结果是,问题在于如何在findById方法上访问services.js中的JSON对象。下面是一行:.controller('MemberDetailCtrl', function($scope, $stateParams, MemberService) { MemberService.findById($stateParams.memberId).then(function (member) { $scope.member = member; });
- var member=members[memberId-1];-->它返回一个未定义的值
但是我不知道如何正确访问members变量您可以使用
在forEach
数组中通过id找到合适的用户:members
var member = {}; angular.forEach(members, function (item) { if ( item.id == memberId ) { member = item; return; } }); deferred.resolve(member); return deferred.promise;
使用以下代码,可以在member-detail.html中显示特定的成员数据:
services.js.controller('MemberDetailCtrl', function($scope, $stateParams, MemberService) { MemberService.findById($stateParams.memberId).then(function (member) { $scope.member = member; });
module.factory('MemberService', function($http, $q) { var members = $http.get("data/members.json"); return { getAll: function(){ members = members.then(function(result){ return result; }) var deffered = $q.defer(); deffered.resolve(members); return deffered.promise; }, } });
MemberService获取成员数据并在getAll方法中返回所有这些数据 controllers.jsMemberService.getAll().then(function(members){ angular.forEach(members.data, function(item){ if (item.id == $stateParams.memberId){ $scope.member = item; } }) });
module.factory('MemberService', function($http, $q) { var members = $http.get("data/members.json"); return { getAll: function(){ members = members.then(function(result){ return result; }) var deffered = $q.defer(); deffered.resolve(members); return deffered.promise; }, } });
对于每个成员对象,它将检查item.id是否与$stateParams.memberId的值相同,如果为true,则将在$scope.member中加载成员数据MemberService.getAll().then(function(members){ angular.forEach(members.data, function(item){ if (item.id == $stateParams.memberId){ $scope.member = item; } }) });
感谢@artem petrosian提供的宝贵提示。Hi@artem petrosian,感谢您的反馈。对我来说,它不能正常工作,但也许我理解错了什么。我这样试过:@mbppv这真的很奇怪,你检查了
值是否正确传递了吗?嗨@artem petrosian,是的,memberId值正确传递了。我将您的建议设置为:var members=$http.get(“data/members.json”);var成员={};return{findById:function(memberId){var deferred=$q.defer();angular.forEach(members,function(item,memberId){if(item.id==memberId){member=item;return;}});deferred.resolve(member);return deferred.promise;}在你的<代码>前缀中,你应该删除或重命名第二个PARAM,因为你用项目索引来覆盖<代码>成员ID <代码>。我已经更新了一个例子。谢谢你的反馈。但是它对我不起作用。我稍后再检查我是否能找到问题。如果他的答案是有用的,你应该考虑给他一个赞成票。memberId