如何使用Angularjs正确解析多个工厂' UI.Router

时间:2016-02-19 04:32:48

标签: javascript angularjs angular-ui-router

使用ui.router这成功地将我引导到正确的视图并正确地从我的工厂检索数据:

.state('calendar', {
    url: '/calendar',
    templateUrl: 'templates/calendar.html',
    controller: 'calendarCtrl',
    resolve: { 
        workoutData: ['WorkoutData', function(WorkoutData){ // USING A FACTORY (workoutDataFct.js)
            return WorkoutData.get();
        }]
    }
})

但我现在想从另一家工厂提取数据,但我似乎无法添加这样的新工厂:

    resolve: { 
        workoutData: ['WorkoutData', function(WorkoutData){
            return WorkoutData.get();
        }],
        exercises: ['Exercises', function(Exercises){ // USING FACTORY (exercisesFct.js)
            return Exercises.get();
        }]
    }

我的工厂exerciseFct.js已包含在我的index.html中,就像workoutDataFct.js一样,我将exercises依赖项包含在我的控制器calendarCtrl中,就像我一样添加了workoutData依赖项。 (我忘了做某事吗?)

我没有得到并控制错误,但我没有路由到日历视图。这让我觉得resolve:失败了。 如何解决此问题?

1 个答案:

答案 0 :(得分:0)

为了清楚说明,您可以选择适用的选项。

选项1:

等待所有承诺以$ q.all结束。

    resolve: {
        delayedData: function($q, WorkoutData, Exercises) {

            var WorkoutData = WorkoutData.get();
            var Exercises = Exercises.get();

            WorkoutData.$promise.then(function(response) {console.log('Resource 1 data loaded!')});
            Exercises.$promise.then(function(response) {console.log('Resource 2 data loaded!')});

            return $q.all([WorkoutData.$promise, Exercises.$promise]);
        }
    }

可以找到工作示例here

选项2:

正如@ExplosionPills声明的那样,使用了对象。

    resolve: {
                WorkoutData: ["WorkoutData", function (Gists) {
                  var WorkoutData = WorkoutData.get();
                  WorkoutData.$promise.then(function(response) {console.log('Resource 1 data loaded!')});
                }],
                Exercises: ["Exercises", function (Meta) {
                  var Exercises = Exercises.get();
                  Exercises.$promise.then(function(response) {console.log('Resource 2 data loaded!')});
                }]
            }

可以找到工作示例here

感谢@Explosion Pills提供您的输入。