Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
angularjs-can';t在特定页面上显示json数据_Json_Angularjs_Angularjs Http - Fatal编程技术网

angularjs-can';t在特定页面上显示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数据未正确显示。在本页中,我实际上只尝试输出以下两个表达

我正在尝试从JSON文件加载数据并显示在我的移动应用程序中。但问题是我无法在member-detail.html上显示JSON数据,其中应该显示特定用户的数据。但是在member-index.html上,这里是所有用户的完整列表,我可以正确地获取json数据

我有两个页面/模板:

  • 成员索引.html:列出所有成员。链接到member-detail.html。JSON数据在此处正确显示:
  • 成员详细信息.html:单个成员的详细信息。JSON数据未正确显示。在本页中,我实际上只尝试输出以下两个表达式:

        <h2>Name: {{member.firstname }} {{member.lastname}}</h2>
    
    我正在用一个关于file services.js中的$http.get函数的服务加载json数据。还有两种方法->member-index.html(=工作正常)的findAll和member-detail.html的findById->(工作不正常,无法访问json对象,请看这一行:var member=members[memberId-1]):

    以下控制器用于member-detail.html:

    .controller('MemberDetailCtrl', function($scope, $stateParams, MemberService) {
     MemberService.findById($stateParams.memberId).then(function (member) {
            $scope.member = member;
        });
    
    我的去bug工作的结果是,问题在于如何在findById方法上访问services.js中的JSON对象。下面是一行:

    • var member=members[memberId-1];-->它返回一个未定义的值

    但是我不知道如何正确访问members变量

    您可以使用
    forEach
    members
    数组中通过id找到合适的用户:

    var member = {};
    
    angular.forEach(members, function (item) {
        if ( item.id == memberId ) {
            member =  item;
            return;
        }
    });
    
    deferred.resolve(member);
    
    return deferred.promise;
    

    使用以下代码,可以在member-detail.html中显示特定的成员数据:

    .controller('MemberDetailCtrl', function($scope, $stateParams, MemberService) {
     MemberService.findById($stateParams.memberId).then(function (member) {
            $scope.member = member;
        });
    
    services.js

    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().then(function(members){
            angular.forEach(members.data, function(item){
              if (item.id == $stateParams.memberId){
                $scope.member = item;
              }
            })
         });
    
    MemberService获取成员数据并在getAll方法中返回所有这些数据

    controllers.js

    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().then(function(members){
            angular.forEach(members.data, function(item){
              if (item.id == $stateParams.memberId){
                $scope.member = item;
              }
            })
         });
    
    对于每个成员对象,它将检查item.id是否与$stateParams.memberId的值相同,如果为true,则将在$scope.member中加载成员数据


    感谢@artem petrosian提供的宝贵提示。

    Hi@artem petrosian,感谢您的反馈。对我来说,它不能正常工作,但也许我理解错了什么。我这样试过:@mbppv这真的很奇怪,你检查了
    memberId
    值是否正确传递了吗?嗨@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 <代码>。我已经更新了一个例子。谢谢你的反馈。但是它对我不起作用。我稍后再检查我是否能找到问题。如果他的答案是有用的,你应该考虑给他一个赞成票。