【问题标题】:AngularJS expected information not displayingAngularJS 预期的信息不显示
【发布时间】:2015-10-23 18:56:24
【问题描述】:

我正在开发一个移动应用程序,该应用程序从服务器 (WEBAPI) 获取作业列表并填充适当的字段。当用户单击作业名称时,应用程序会转到详细信息页面,该页面需要再次显示作业信息。

我在获取要显示的信息时遇到问题。

这是索引:

.state('jobs',{
            abstract: true,
            url: '/jobs',
            templateUrl: 'modules/jobs/views/jobs.html',
            controller: ['$scope', '$state', '$stateParams', 'jobs', function($scope, $state, $stateParams, jobs) {

                jobs.getData()
                    .then(function(jobs) {
                        $scope.jobs = jobs;
                    });

            }]
        })
        // Jobs > List
        .state('jobs.list', {
            url: '',
            title: 'All Jobs',
            templateUrl: 'modules/jobs/views/jobs.list.html' 
        })
        // Jobs > Detail
        .state('jobs.detail', {
            url: '/{JobId:[0-9]{1,4}}',
            title: 'Job Details',
            views: {
                'details': {
                    templateUrl: 'modules/jobs/views/jobs.detail.html',
                    controller: ['$scope', '$state', '$stateParams', 'utils', function($scope, $state, $stateParams, utils) {
                        $scope.job = utils.findById($scope.jobs, $stateParams.JobId);

                        $scope.edit = function(){
                            $state.go('.edit', $stateParams);
                        };

                    }]
                }, 
                '': {
                    templateUrl: 'modules/jobs/views/jobs.materials.html',
                    controller: ['$scope', 'materials', '$stateParams', function($scope, materials, $stateParams) {

                        materials.getDataById($stateParams.JobId)
                            .then(function(materials) {
                                $scope.materials = materials;
                            });

                        $scope.subHeader = 'Bulk Sack Materials';

                    }]
                }
            }
        })

这里是服务:

app.factory('jobs', ['$resource', '$q', '$http', 'localStorageService', function($resource, $q, $http, localStorageService) {
    localStorageService.set('SessionId', 'A00DB328-7F9C-4517-AD5D-8EAA16FBBC8F');

    var SessionId = localStorageService.get('SessionId');
    return {
        getData: function() {
            var deferred = $q.defer();
            $http.get(baseUrl + 'Job/GetJobs?SessionId=' + SessionId, {
                cache: true
            }).success(function(jobs) {
                deferred.resolve(jobs);
            });
            return deferred.promise;
        }

    };

}]);

app.factory('materials', ['$resource', '$q', '$http', 'localStorageService', function($resource, $q, $http, localStorageService) {

    var SessionId = localStorageService.get('SessionId');

    return {
        getDataById: function(id) {
            var deferred = $q.defer();
            $http.get(baseUrl + 'Material/GetMaterials/' + id + '?SessionId=' + SessionId, {
                cached: 'true'
            }).success(function(materials) {
                deferred.resolve(materials);
            });
            return deferred.promise;
        }
    };

}]);

这里是 utils 服务:

app.factory('utils', function() { 
    return {
        findById: function findById(a, id) {
            for (var i = 0; i < a.length; i++) {
                if(a[i].id === id) {
                    return a[i];
                }
            }
            return null;
        }
    };
});

这里是 job.list 的 HTML:

<div class="list-group">
<a class="list-group-item" ng-repeat="job in jobs" ui-sref="jobs.detail({ JobId: job.JobId })"> 
<dl>
    <dt>{{job.Name}}</dt>
    <dd>{{job.Location}}</dd>
</dl>

关于如何让它发挥作用的一些见解会很棒。 谢谢你-

【问题讨论】:

  • 您有什么具体问题/错误?
  • 在详细信息页面上,我正在寻找要显示的作业信息。因此,如果我单击作业名称“Foo”,则作业 Foo 在详细信息页面上。如果我点击详细信息页面上的作业“栏”栏显示

标签: javascript arrays angularjs rest object


【解决方案1】:

如果我正确推断出你的目标,那么你的问题就在下面一行:

$scope.job = utils.findById($scope.jobs, $stateParams.JobId);

$scope.jobs 不会像您期望的那样存在。作业对象是在列表视图的控制器范围内创建的,而不是在详细信息视图的控制器中创建的。你会想做一些你在''控制器中所做的事情

JobService.getJobById($stateParams.JobId).then(function(data) {
     $scope.job = data;
});

【讨论】:

  • 我已经删除了你说的第一行。然后将此添加到详细信息控制器
  • jobs.getDataById($stateParams.JobId).then(function(jobs){ $scope.jobs = jobs; });
  • 抱歉回复晚了,你有没有得到它的工作?如果没有,你能做一个 plunkr 或类似的东西,以便我帮忙吗?
  • 那太好了!谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-16
相关资源
最近更新 更多