我收到此错误:
Error: Error: [$injector:unpr] http://errors.angularjs.org/1.3.7/$injector/unpr?p0=HttpResponseProvider%20%3C-%20HttpResponse%20%3C-%20DealerLeads
Injector Unknown provider
这是我的路由器(ui.router):
$stateProvider
.state('main', {
url: "/main",
templateUrl: "views/main.html",
data: { pageTitle: 'Main Page' }
})
.state('leads', {
url: "/leads",
templateUrl: "views/leads.html",
data: { pageTitle: 'Dealer Leads' },
controller: 'DealerLeads',
resolve: DealerLeads.resolve
})
这是我的 Controller :
function DealerLeads($scope, HttpResponse) {
alert(JSON.stringify(HttpResponse));
}
这是我的决心:
DealerLeads.resolve = {
HttpResponse: function ($http) {
...
}
}
数据正在到达 Controller ,我在警报中看到它。然而,在 Controller 完成之后,在 View 的渲染过程中(我认为),问题似乎正在发生。
最终呈现的 View 有两个 Controller :一个位于 body 标记中的主 Controller ,第二个 Controller 位于其中的“DealerLeads”。我尝试删除主 Controller ,但问题仍然存在。
我做错了什么?是否需要更多代码来理解/解决该问题?
最佳答案
当您在绑定(bind)到路由的 Controller 中使用路由解析参数作为依赖项注入(inject)时,您不能将该 Controller 与ng-controller
一起使用指令,因为服务提供商的名称为 HttpResponse
不存在。它是一个动态依赖项,由路由器在实例化要绑定(bind)到其各自部分 View 中的 Controller 时注入(inject)。
只需删除 ng-controller="DealerLeads"
从 View 并确保 View 是由状态 leads
呈现的 html 的一部分@templateUrl: "views/leads.html",
。 Router会将其绑定(bind)到模板上,为您解决动态依赖HttpResponse
。如果您想使用controllerAs,您可以在路由器本身中将其指定为:-
controller: 'DealerLeads',
controllerAs: 'leads' //Not sure if this is supported by ui router yet
或
controller: 'DealerLeads as leads',
当你这样做时:
.state('leads', {
url: "/leads",
templateUrl: "views/leads.html",
data: { pageTitle: 'Dealer Leads' },
controller: 'DealerLeads',
resolve: DealerLeads.resolve
})
确保DealerLeads
可以在定义路线的地方访问。更好的做法是将路由定义移动到其自己的 Controller 文件中,以便它们都位于一个位置。只要有可能,特别是在路线的部分 View 中,最好摆脱 ng-controller
启动指令并使用路由来实例化并绑定(bind)该模板的 Controller 。它提供了更多的可重用性,因为 View 作为一个整体不与 Controller 名称紧密耦合,而仅与其契约紧密耦合。所以我不担心删除 ng-controller
路由器可以实例化 Controller 的指令。
关于javascript - AngularJS + 路由 + 解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28205914/