javascript - 在 $routeProvider 解析方法中注入(inject) Controller

标签 javascript angularjs

继主要答案here ,我尝试做同样的事情,但我的 Controller 是隔离的。 我明白了:

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
                 })

Controller :

(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);

我不想让 Controller 成为一个全局函数,我喜欢它本身是孤立的。

最佳答案

在您的情况下,您可以创建一项服务,您可以在解析函数中使用该服务。

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 
    }
});

有关更多信息,请参阅 this reference

关于javascript - 在 $routeProvider 解析方法中注入(inject) Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28584165/

相关文章:

angularjs - 应用cellFilter后如何对数据进行分组UI-Grid

javascript - webkit 输入类型=日期 在错误的日期发送空值

Javascript 钻石? (小于后跟大于)

javascript - 网页抓取 : Automating button click

javascript - 在 AngularJS 应用程序中有条件地注入(inject)模块

facebook - ng facebook 与 facebook 评论

javascript - AngularJS : How to access the directive's scope in transcluded content?

javascript - MathJax 中的 HTML 实体(<、> 和 &)支持

javascript - Chrome 在 anchor 标记中创建页面内链接的问题

javascript - Bootstrap 下拉菜单不会在 angularjs spa 应用程序中折叠