2015-03-24 2 views
1

Только что начался на AngularJS, и до сих пор это было непростое испытание.Угловой неизвестный поставщик при попытке получить константу из другого модуля

Моя проблема сегодня заключается в том, что я пытаюсь настроить контроллер через переменную в URL-адресе. Я не хочу, чтобы «реальный» контроллер должен был знать, откуда пришел данный параметр, если он есть. Поэтому главный контроллер приложения отвечает за получение параметра от URL-адреса и настройку константы, которую будет использовать «реальный» контроллер.

Для меня, я не вижу, что я делаю неправильно в инициализации. Любая помощь будет высоко оценена (в том числе и то, что стандартные методы для устранения неполадок такого рода проблем :))

Вот HTML:

<!DOCTYPE html> 
<html ng-app="myApp"> 
    <head> 
    <!-- the base tag is required for th Angular.js $location.search() function to work correctly --> 
    <base href='/' /> 
    <script src= "http://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.js"></script> 
    <script> 
     angular.module("myController.constants", []); 
     angular.module("myApp", ["myController", "myController.constants"], function($locationProvider) { 
      $locationProvider.html5Mode(true); 
     }) 
     .controller("myAppCtrl", ['$scope', '$location', function ($scope, $location) { 
      var searchObject = $location.search(); 
      angular.module("myController.constants").constant('myConstant', searchObject['theConstant']); 
     }]); 
    </script> 
    <script src="js/controllerExample.js"></script> 
</head> 
<body ng-controller="myAppCtrl"> 
    <div ng-controller="myControllerCtrl"> 
     <p>The constant is {{theConstant}}</p> 
    </div> 
</body> 
</html> 

Вот это JS для контроллера:

angular.module("myController", ["myController.constants"]) 
.controller("myControllerCtrl", ['$scope', 'myConstant', function ($scope, myConstant) { 
    $scope.theConstant = myConstant; 
}]); 

с выше коде, я получаю сообщение об ошибке

Ошибка: [$ инжектор: unpr] Неизвестный поставщик: myConstantProvider < - myConstant < - myControllerCtrl

Спасибо!

+0

Я мог ошибаться, но я не думаю, что вы можете объявить модуль внутри объявления контроллера. – Komo

+0

myConstant не существует. Вы должны иметь фабрику/службу/значение, созданную с этим именем, прежде чем вы сможете ввести ее где-нибудь. – ribsies

+0

Контроллеры, определяющие константы для других контроллеров, вероятно, не такая хорошая идея. По крайней мере, вы сделаете это ценным. Но, как сказал @Komo, он не знает, будет ли определение таких вещей, как это, сделать его в инжектор. Лучше всего использовать сервис для такого рода общения. – Cerad

ответ

1

Я мог ошибаться, но я не думаю, что вы можете объявить модуль внутри объявления контроллера. Попробуйте положить

angular.module("myController.constants").constant('myConstant', searchObject['theConstant']); 

за пределами декларации "myAppCtrl".

+0

Вот и все. Причина в том, что код контроллера запускается _after_, инжектор зависимостей пытается найти «myConstant». Вы определяете его, но слишком поздно. –

+0

Это причина ошибок, но на самом деле это не решит проблему, так как оператору нужна информация, основанная на текущем местоположении. Надеюсь, он скоро откроет маршрутизатор и поймет, что это не так уж плохо. – Cerad

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