Error: $injector:unpr Unknown Provider Angular
Error: $injector:unpr Unknown Provider Angular
我已经在布局中创建了一个项目 MVC 我有这个(用于加载菜单类别):
<html data-ng-app="app">
.
.
.
//in the menu
<li class="dropdown" ng-controller="menuCategoriesCtrl as vmCat">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="true">Categorias<span class="caret"></span>
</a>
<ul id="listaCategorias" class="dropdown-menu" aria-labelledby="dropdownMenu1" ng-repeat="categoria in vmCat.categories">
<li>
<a ng-href="{{categoria.url}}">
{{categoria.Nombre}}
</a>
</li>
</ul>
</li>
app.js是这样的:
(function () {
"use strict";
angular
.module('app', ['ngRoute', 'ngAnimate', 'ui.bootstrap']).config(configRoute);
configRoute.$inject = ['$routeProvider', '$locationProvider'];
function configRoute($routeProvider, $locationProvider) {
$routeProvider
.when('/', {
templateUrl: 'scripts/app/partials/Home.html',
controller: 'productosPrincipalCtrl',
controllerAs: 'vm'
})
.when('/Mapa', {
templateUrl: 'scripts/app/partials/Map.html'
})
.otherwise({
redirectTo: '/'
});
$locationProvider.html5Mode(false); //.hashPrefix("!")
}
})();
菜单类别的控制器是这样的:
(function() {
angular.module('app')
.controller('menuCategoriesCtrl', menuCategoriesCtrl);
menuCategoriesCtrl.$inject = ['categoryService'];
function menuCategoriesCtrl(categoryService) {
var vmCategory = this;
var listCat = [];
vmCategory.listCategories = [];
getListCategories().then(function() {
for (var i = 0; i < listCat.length; i++) {
vmCategory.listCategories.push({
url: '#/Categoria/' + listCat.CategoriaId + '-' + listCat.Nombre,
nombreCategoria: listCat.Nombre
});
}
});
function getListCategories() {
return categoryService.getCategories()
.then(function(response) {
listCat = response;
return listCat;
})
.catch(function (response) {
return alert('Error ' + response);
});
};
}
})();
服务是这样的:
(function() {
var uriCategorias = 'http://localhost/Api/GetCategories';
angular.module('app')
.service('categoryService', categoryService);
categoryService.$inject = ['$http'];
function categoryService($http) {
var srvCat = this;
srvCat.getCategories = getCategories;
function getCategories() {
return $http.get(uriCategorias)
.then(getCategoriesComplete)
.cath(getCategoriesFail);
function getCategoriesComplete(response) {
return response.data;
}
function getCategoriesFail(response) {
return alert('Error ' + response);
}
}
}
})
当我在浏览器中执行此操作时,在服务中注入控制器时出现错误。
谁能解释一下为什么?
这个名字是正确的我在app_start
的捆绑包中都有参考
提前致谢
您应该调用服务函数,因为您正在使用自执行函数(IIFE 模式)。因为 service.js 的函数没有被调用,它不会将 service
组件绑定到 app
模块。因此,在您的代码中注入服务会出错,因为它未在应用程序模块中注册。
代码
(function() {
//service code as is
})(); <-- () self calling function should be there
我已经在布局中创建了一个项目 MVC 我有这个(用于加载菜单类别):
<html data-ng-app="app">
.
.
.
//in the menu
<li class="dropdown" ng-controller="menuCategoriesCtrl as vmCat">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="true">Categorias<span class="caret"></span>
</a>
<ul id="listaCategorias" class="dropdown-menu" aria-labelledby="dropdownMenu1" ng-repeat="categoria in vmCat.categories">
<li>
<a ng-href="{{categoria.url}}">
{{categoria.Nombre}}
</a>
</li>
</ul>
</li>
app.js是这样的:
(function () {
"use strict";
angular
.module('app', ['ngRoute', 'ngAnimate', 'ui.bootstrap']).config(configRoute);
configRoute.$inject = ['$routeProvider', '$locationProvider'];
function configRoute($routeProvider, $locationProvider) {
$routeProvider
.when('/', {
templateUrl: 'scripts/app/partials/Home.html',
controller: 'productosPrincipalCtrl',
controllerAs: 'vm'
})
.when('/Mapa', {
templateUrl: 'scripts/app/partials/Map.html'
})
.otherwise({
redirectTo: '/'
});
$locationProvider.html5Mode(false); //.hashPrefix("!")
}
})();
菜单类别的控制器是这样的:
(function() {
angular.module('app')
.controller('menuCategoriesCtrl', menuCategoriesCtrl);
menuCategoriesCtrl.$inject = ['categoryService'];
function menuCategoriesCtrl(categoryService) {
var vmCategory = this;
var listCat = [];
vmCategory.listCategories = [];
getListCategories().then(function() {
for (var i = 0; i < listCat.length; i++) {
vmCategory.listCategories.push({
url: '#/Categoria/' + listCat.CategoriaId + '-' + listCat.Nombre,
nombreCategoria: listCat.Nombre
});
}
});
function getListCategories() {
return categoryService.getCategories()
.then(function(response) {
listCat = response;
return listCat;
})
.catch(function (response) {
return alert('Error ' + response);
});
};
}
})();
服务是这样的:
(function() {
var uriCategorias = 'http://localhost/Api/GetCategories';
angular.module('app')
.service('categoryService', categoryService);
categoryService.$inject = ['$http'];
function categoryService($http) {
var srvCat = this;
srvCat.getCategories = getCategories;
function getCategories() {
return $http.get(uriCategorias)
.then(getCategoriesComplete)
.cath(getCategoriesFail);
function getCategoriesComplete(response) {
return response.data;
}
function getCategoriesFail(response) {
return alert('Error ' + response);
}
}
}
})
当我在浏览器中执行此操作时,在服务中注入控制器时出现错误。
谁能解释一下为什么?
这个名字是正确的我在app_start
的捆绑包中都有参考提前致谢
您应该调用服务函数,因为您正在使用自执行函数(IIFE 模式)。因为 service.js 的函数没有被调用,它不会将 service
组件绑定到 app
模块。因此,在您的代码中注入服务会出错,因为它未在应用程序模块中注册。
代码
(function() {
//service code as is
})(); <-- () self calling function should be there