Javascript AngularJS+;路由+;决定

Javascript AngularJS+;路由+;决定,javascript,angularjs,angular-ui-router,angularjs-routing,Javascript,Angularjs,Angular Ui Router,Angularjs Routing,我得到了这个错误: 错误:错误:[$injector:unpr]$injector/unpr?p0=HttpResponseProvider%20%3C-%20HttpResponse%20%3C-%20DealReads 注入器未知提供程序 这是我的路由器(ui.router): 这是我的控制器: function DealerLeads($scope, HttpResponse) { alert(JSON.stringify(HttpResponse)); } 以下是我的决心: D

我得到了这个错误:

错误:错误:[$injector:unpr]$injector/unpr?p0=HttpResponseProvider%20%3C-%20HttpResponse%20%3C-%20DealReads

注入器未知提供程序

这是我的路由器(ui.router):

这是我的控制器:

function DealerLeads($scope, HttpResponse) {
    alert(JSON.stringify(HttpResponse));
}
以下是我的决心:

DealerLeads.resolve = {
    HttpResponse: function ($http) {
...
    }
}
数据正在进入控制器,我在警报中看到它。但是,在控制器完成之后,在视图渲染期间(我认为),问题似乎正在发生

最终渲染视图有两个控制器:一个主控制器位于主体标记中,另一个控制器位于主体标记内的“DealReads”。我已尝试删除主控制器,但问题仍然存在


我做错了什么?是否需要更多代码来理解/解决此问题?

在绑定到路由的控制器中使用路由解析参数作为依赖项注入时,不能将该控制器与
ng controller
指令一起使用,因为名为
HttpResponse
的服务提供商不存在。当路由器在其各自的部分视图中实例化要绑定的控制器时,它会注入一个动态依赖项

只需从视图中删除
ng controller=“DealerLeads”
,并确保视图是由state
leads
@
templateUrl:“views/leads.html”
呈现的html的一部分。路由器会将其绑定到模板,以便您解析动态依赖关系
HttpResponse
。如果要使用controllerAs,可以在路由器本身中指定为:-

controller: 'DealerLeads',
controllerAs: 'leads' //Not sure if this is supported by ui router yet

当您这样做时:

.state('leads', {
        url: "/leads",
        templateUrl: "views/leads.html",
        data: { pageTitle: 'Dealer Leads' },
        controller: 'DealerLeads',
        resolve: DealerLeads.resolve
    })

确保
DealerLeads
可在定义路线的位置访问。更好的做法是将路由定义移动到其自己的控制器文件中,以便它们都位于一个位置。只要可能,尤其是在路由的局部视图中,最好不要启动指令,而是使用路由来实例化和绑定该模板的控制器。它提供了更多的可重用性,因为视图作为一个整体,不与控制器名称紧密耦合,而只与其契约紧密耦合。所以我不会担心删除路由器可以实例化控制器的
ng controller
指令。

我不完全理解您的问题,也不是像@PSL这样的专家

如果您只想将一些数据传递到控制器,下面的代码可能会对您有所帮助

我从项目中复制了一段代码:

.state('masthead.loadTests.test',{
    url: '/loadTests/:id',
    templateUrl: 'load-tests/templates/load-test-entity.tpl.html',
    controller: 'loadTestEntityCtrl',
    data: { pageTitle: 'loadTests',
        csh: '1005'
    },
    resolve: {
        // Get test entity data before enter to the page (need to know running state)
        LoadTestEntityData: [
            '$stateParams',
            '$state',
            'LoadTestEntity',
            'LoggerService',
            '$rootScope',
            function ($stateParams, $state, LoadTestEntity, LoggerService, $rootScope) {
                // Get general data
                return LoadTestEntity.get({id: $stateParams.id},function () {
                },
                    // Fail
                    function () {
                        // When error navigate to homepage
                        LoggerService.error('error during test initiation');
                        $state.go('masthead.loadTests.list', {TENANTID: $rootScope.session.tenantId});
                    }).$promise;
            }
        ]
    }
})
这里LoadTestEntityData是我们注入控制器的数据, LoadTestEntity和LoggerService是构建数据所需的服务

.factory('LoadTestEntity', ['$resource', function ($resource) {
    return $resource(
        '/api/xxx/:id',
        {id: '@id'},
        {
            create: {method: 'POST'},
            update: {method: 'PUT'}
        }
    );
}])

希望有帮助

主体标签中的一个主控制器,以及该标签中的第二个控制器“DealReads”
-->您是否对ng控制器使用
DealReads
?还是让路由器来实例化它?请显示完整的错误消息?它们都在各自的标记中分别声明:这是错误的,您不能这样做,好吧,那么我应该怎么做?我从未见过将控制器属性用作解决方案的一部分。我不是100%确定它不会工作,但考虑到你的错误信息,我认为不会。尝试用“正常”语法替换resolve属性,看看是否有效。谢谢!!!!非常感谢。在过去的6个小时里,我一直在努力解决这个问题,重新编写了这么多代码,我的大脑很痛@不客气,希望我能提供一些见解:)对我对这一点还相当陌生,随着时间的推移不断学习。对我来说,很多障碍都发生在这样的细微差别上。在我今天的所有搜索中,我没有发现任何地方明确声明不显式设置ng控制器属性。它会自动将其绑定到视图
.state('masthead.loadTests.test',{
    url: '/loadTests/:id',
    templateUrl: 'load-tests/templates/load-test-entity.tpl.html',
    controller: 'loadTestEntityCtrl',
    data: { pageTitle: 'loadTests',
        csh: '1005'
    },
    resolve: {
        // Get test entity data before enter to the page (need to know running state)
        LoadTestEntityData: [
            '$stateParams',
            '$state',
            'LoadTestEntity',
            'LoggerService',
            '$rootScope',
            function ($stateParams, $state, LoadTestEntity, LoggerService, $rootScope) {
                // Get general data
                return LoadTestEntity.get({id: $stateParams.id},function () {
                },
                    // Fail
                    function () {
                        // When error navigate to homepage
                        LoggerService.error('error during test initiation');
                        $state.go('masthead.loadTests.list', {TENANTID: $rootScope.session.tenantId});
                    }).$promise;
            }
        ]
    }
})
.factory('LoadTestEntity', ['$resource', function ($resource) {
    return $resource(
        '/api/xxx/:id',
        {id: '@id'},
        {
            create: {method: 'POST'},
            update: {method: 'PUT'}
        }
    );
}])