javascript - AngularJS + 路由 + 解析

标签 javascript angularjs angular-ui-router angularjs-routing

我收到此错误:

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/

相关文章:

javascript - 将经典 promise 与异步相结合

jquery - 如何在 AngularJs 中执行 jQuery 动画,例如淡入和淡出

javascript - 仅使用 ui-router 和 AngularJS 更改一个 View

javascript - Angular ui-router 在 URL 中传递参数

javascript - AngularJS - UI 路由器 - 以编程方式添加状态

javascript - 浏览器关闭时不会触发 onunload

javascript - ExtJS 6 TreePanel 滚动不起作用

javascript - jquery 使用复选框禁用文本框(带复选框的多个文本框)

javascript - $resource 在 AngularJS 中响应一个空数组

javascript - AngularJS ngGrid 模块声明