【问题标题】:Angular 1.5 Unknown providerAngular 1.5 未知提供者
【发布时间】:2017-10-08 19:17:50
【问题描述】:

所以我得到了:

错误:$injector:unpr
未知提供者 未知提供者:canOrganiseProvider

我不知道为什么,我只是有这个端点,我已经测试过它可以正常工作,只是想在导航到路线之前解决这个问题,尝试解决 canOrganise 时它不起作用,任何想法为什么?

谢谢。

跳入代码。

终点。

  [HttpGet]
        [Route("{eventCode}/isOrganiser")]
        [Audit(AuditLog.Nothing)]
        public IHttpActionResult HasOrganisationalRights([FromUri] string eventCode)
        {
            var response = Resolve<ICanManageEventOrganisationRightsOperation>().CanOrganiseEvent(new CanManageEventOrganisationRequest
            {
                EventCode = eventCode,
                CurrentUser = CurrentUser,
            });

            return CreateResponse(response, () => response.CanOrganise );
        }

角度路由:

angular.module('Events').config(['$routeProvider',
    function ($routeProvider) {
        $routeProvider
    .when('/event/:event/attendees', {
                        templateUrl: '/Content/AngularApp/Attendees/List/Template.html',
                        controller: 'AttendeesController',
                        resolve: {
                            'data': ['$route', 'AttendeesService', function ($route, AttendeesService) {
                                return AttendeesService.getAttendees($route.current.params.event).then(function (response) {
                                    return response.data;
                                });
                            }],
                            'canManage': ['$route', 'AttendeesService', function ($route, AttendeesService) {
                                return AttendeesService.canManage($route.current.params.event).then(function (response) {
                                    return response;
                                });
                            }],
                            'canOrganise': ['$route', 'AttendeesService', function ($route, AttendeesService) {
                                return AttendeesService.isOrganiser($route.current.params.event).then(function (response) {
                                    return response;
                                });
                            }],
                            'grouped': ['$route', 'AttendeesService', function ($route, AttendeesService) {
                                return false;
                            }]
                        }
                    })
}
]);

角度服务

    angular.module('Events').factory('AttendeesService', ['$http', 
    function ($http) {
            return {

                getAttendee: function (eventCode, accountName) {
                    return $http.get('api/events/' + eventCode + '/attendees/' + accountName + '/');
                },

                isOrganiser: function (eventCode) {
                    return $http.get('api/events/' + eventCode + '/isOrganiser');
                },
    }

角度控制器

    angular.module('Events').controller('AttendeesController', ['$scope', '$rootScope', '$routeParams', '$location', '$filter', 'data', 'canManage', 'canOrganise',
        'grouped', 'AttendeesService', 'AttendeeAdderService', 'AttendeeDeleterService', 'TrackingService', 'WatcherAdderService', 'WatcherDeleterService',
        'GroupColorChangerService', 'DefaultSortingChangerService', 'AdminService',
        function ($scope, $rootScope, $routeParams, $location, $filter, data, canManage, canOrganise, grouped, AttendeesService, AttendeeAdderService, AttendeeDeleterService,
                TrackingService, WatcherAdderService, WatcherDeleterService, GroupColorChangerService, DefaultSortingChangerService, AdminService) {

...

  $scope.isOrganiser = canOrganise;

...
    }
]);

angular.module('事件', [ 'ngRoute','ngSanitize', 'angularModalService','ngTagsInput' ]);

【问题讨论】:

  • 这对我来说似乎很好...我正在寻找一些错字但我没有找到任何错字。在解决之前,您是否查看了控制台以查看是否有问题?这只发生在canOrganise?

标签: angularjs angular-routing angular-providers


【解决方案1】:

发现了我的问题,在 routing.js 文件中,我有另一个指向相同控制器但不同 URL 的路由。第一次没有注意到..所以将提供者添加到正确的路线解决了我的问题。

添加到这里

.when('/event/:event/attendees', {
                templateUrl: '/Content/AngularApp/Attendees/List/Template.html',
                controller: 'AttendeesController',
                resolve: {
                    'data': ['$route', 'AttendeesService', function ($route, AttendeesService) {
                        return AttendeesService.getAttendees($route.current.params.event).then(function (response) {
                            return response.data;
                        });
                    }],
                    'canManage': ['$route', 'AttendeesService', function ($route, AttendeesService) {
                        return AttendeesService.canManage($route.current.params.event).then(function (response) {
                            return response;
                        });
                    }],
                    'canOrganise': ['$route', 'AttendeesService', function ($route, AttendeesService) {
                        return AttendeesService.isOrganiser($route.current.params.event).then(function (response) {
                            return response;
                        });
                    }],
                    'grouped': ['$route', 'AttendeesService', function ($route, AttendeesService) {
                        return false;
                    }]
                }
            })

但应该在这里添加它

.when('/event/:event/attendees/grouped/:fieldId', {
                templateUrl: '/Content/AngularApp/Attendees/List/Template.html',
                controller: 'AttendeesController',
                resolve: {
                    'data': ['$route', 'AttendeesService', function ($route, AttendeesService) {
                        return AttendeesService.getAttendeesGrouped($route.current.params.event, $route.current.params.fieldId).then(function (response) {
                            return response.data;
                        });
                    }],
                    'canManage': ['$route', 'AttendeesService', function ($route, AttendeesService) {
                        return AttendeesService.canManage($route.current.params.event).then(function (response) {
                            return response;
                        });
                    }],
                    'canOrganise': ['$route', 'AttendeesService', function ($route, AttendeesService) {
                        return AttendeesService.isOrganiser($route.current.params.event).then(function (response) {
                            return response;
                        });
                    }],
                    'grouped': function () { return true; },
                }
            })

【讨论】:

    【解决方案2】:

    要使用 $routeProvider,您可以将 ng-route 模块包含到您的应用模块中:

    angular.module('yourModule', ['ngRoute'])
    

    并在您的 html 文件中添加连接脚本:

     <script src="bower_components/angular/angular.min.js"></script>
    ...
     <script src="bower_components/angular-route/angular-route.min.js"></script>
    

    【讨论】:

    • 啊,是的,我在另一个文件中有 angular.module('Events', [ 'ngRoute', 'ngSanitize', 'angularModalService', 'ngTagsInput' ]);
    猜你喜欢
    • 2012-09-02
    • 2017-04-16
    • 2017-08-26
    • 2016-11-15
    • 2013-04-20
    • 1970-01-01
    • 2016-03-26
    • 1970-01-01
    相关资源
    最近更新 更多