【问题标题】:AngularJS ui-router resolve does not return custom valueAngularJS ui-router解析不返回自定义值
【发布时间】:2014-10-10 23:01:01
【问题描述】:

在移动到我的页面之前尝试解析某些数据时,我强制解析一个承诺,将其转换为自定义对象,然后尝试将自定义对象返回给我的解析对象。

            .state("trip.detail", {
                url: '/:tripId',
                templateUrl: 'partials/trip/detail.html',
                controller: 'TripDetailController',
                resolve: {
                    trainData: function (TripService, $stateParams, $q) {
                        return TripService.getTripById($stateParams.tripId,function (data) {
                            console.log("received: " + data);
                            return {
                                "relativeTrainId": data.trainId,
                                "from": new Date(data.departure).toISOString(),
                                "to": new Date(data.arrival).toISOString(),
                                "projectId": data.projectId,
                                "isTrip": true,
                                "tripId": data.id,
                                "trajectory": data.trajectory,
                                "statistics": data.statistics
                            }
                        }).$promise;
                    }
                }
            });

这一切都有效,除了注入我的控制器的“trainData”实际上是值“数据”而不是我创建的自定义值。

发生了什么事?

关于 TripService 的额外信息:

services.factory('TripService', function ($resource) {

function TripService() {
    this.tripResource = $resource('rest/trip/:tripId');
}


TripService.prototype.getTrips = function (start, end, project, trainIds, callback) {
    return this.tripsResource.query({
        projectId: project,
        trainIds: trainIds,
        from: start,
        to: end
    }, callback)
}

TripService.prototype.getTripById = function (tripId, callback) {
    return this.tripResource.get({
        tripId: tripId
    }, callback);
}

return new TripService();

});

【问题讨论】:

    标签: javascript angularjs


    【解决方案1】:

    您必须创建自己的 Promise 并使用您的自定义对象解决它:

            .state("trip.detail", {
                url: '/:tripId',
                templateUrl: 'partials/trip/detail.html',
                controller: 'TripDetailController',
                resolve: {
                    trainData: function (TripService, $stateParams, $q) {
                        var deferred = $q.defer();
                        TripService.getTripById($stateParams.tripId,function (data) {
                            console.log("received: " + data);
                            deferred.resolve({
                                "relativeTrainId": data.trainId,
                                "from": new Date(data.departure).toISOString(),
                                "to": new Date(data.arrival).toISOString(),
                                "projectId": data.projectId,
                                "isTrip": true,
                                "tripId": data.id,
                                "trajectory": data.trajectory,
                                "statistics": data.statistics
                            });
                        });
                        return deferred.promise;
                    }
                }
            });
    

    【讨论】:

    • trainData 未定义
    【解决方案2】:

    @alfrescian

    你几乎是正确的。我把 deferred.$promise 改成了 deferred.promise

    谢谢

    【讨论】:

    • yub,只有 $resource 对象有 $promise。修正了我的答案。
    猜你喜欢
    • 2016-12-17
    • 1970-01-01
    • 1970-01-01
    • 2017-11-24
    • 2015-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-18
    相关资源
    最近更新 更多