簡體   English   中英

在$ routeProvider解決方法中注入控制器

[英]Inject controller in $routeProvider resolve method

按照此處的主要答案,我嘗試執行相同的操作,但我的控制器被隔離了。 我得到這個:

Uncaught Error: [$injector:modulerr] Failed to instantiate module myApp due to:
ReferenceError: myController is not defined

只有在resolve:參數存在的情況下,我才知道這個。 我該如何解決呢?

路由配置:

 .state("my.jobs", {
                     url: "/my/:jobId",
                     templateUrl: "Views/my/index.htm",
                     controller: "myController",
                     resolve: myController.resolve  // the root of all evil here
                 })

控制器:

(function (ng, app) {

    "use strict";

    var ctrl = app.controller(
        "myController",
        ['$scope', 'job',
        function ($scope, job) {
            $scope.job = job;
        }]);

    ctrl.resolve = {
        job: function ($q, $stateParams, batchService) {
            var deferred = $q.defer();
            jobService.loadJob($stateParams.jobId, true)
                    .then(deferred.resolve, deferred.reject);
        },
        delay: function ($q, $defer) {
            var delay = $q.defer();
            $defer(delay.resolve, 1000);
            return delay.promise;
        }
    };
})(angular, myApp);

我不想使控制器成為全局函數,我喜歡按原樣隔離它。

在您的情況下,您可以創建一項服務,您可以在您的resolve函數中使用它。

app.factory('resolveService', ['$q', '$stateParams', 'batchService','jobService',function($q, $stateParams, batchService,jobService ) {
    return {
        job: function($q, $stateParams, batchService) {
            var deferred = $q.defer();
            jobService.loadJob($stateParams.jobId, true).then(deferred.resolve, deferred.reject);
            return delay.promise;
        },
        delay: function($q, $defer) {
            var delay = $q.defer();
            $defer(delay.resolve, 1000);
            return delay.promise;
        }
    }
}]);

然后配置代碼將是

.state("my.jobs", {
    url: "/my/:jobId",
    templateUrl: "Views/my/index.htm",
    controller: "myController",
    resolve: {
        resolveService: "resolveService" //this resolves to a service 
    }
});

有關更多信息,請參見此參考

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM