Javascript 在$routeProvider解析方法中注入控制器
按照主要答案,我也尝试了同样的方法,只是我的控制器是隔离的。 我明白了:Javascript 在$routeProvider解析方法中注入控制器,javascript,angularjs,Javascript,Angularjs,按照主要答案,我也尝试了同样的方法,只是我的控制器是隔离的。 我明白了: Uncaught Error: [$injector:modulerr] Failed to instantiate module myApp due to: ReferenceError: myController is not defined 只有当resolve:参数存在时,我才会得到这个结果。 我怎样才能解决这个问题 路由配置: .state("my.jobs", {
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);
我不想让控制器成为一个全局函数,我喜欢它是孤立的。在您的情况下,您可以创建一个服务,您可以在解析函数中使用它
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
}
});
有关更多信息,请查看您引用的示例之所以有效,是因为它使用全局变量,而您的案例是将变量隔离。是的,我已经提到过,如何使其与隔离变量一起工作controllers@ak它在没有resolve function()的情况下工作吗?,我建议您将代码放在angular service中..然后使用..它在.state定义中不使用resolve函数