2015-12-20 1 views
1

У меня есть создать проект 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

заранее спасибо

ответ

1

Вы должны вызвать сервисную функцию, как вы используете Атман Выполнение функции (рисунок IIFE). Поскольку функция service.js не вызывается, она не связывает компонент service с модулем app. Следовательно, инъекция службы в ваш код дает ошибку, поскольку она не зарегистрирована в модуле приложения.

Код

(function() { 

    //service code as is 

})(); <--() self calling function should be there 
+0

Это верно, спасибо много! –

+0

Рад помочь вам. благодаря –

Смежные вопросы