2016-07-12 2 views
1

неизвестная ошибка провайдера: [$ injector: unpr] http://errors.angularjs.org/1.4.3/ $ injector/unpr? p0 = postbuttonsProvider% 20% 3C-% 20postbuttons% 20% 3C-% 20RandomBusinessCtrl

вот мой код: директива определяется следующим образом:

angular.module('home', ['ngAnimate', 'ui.bootstrap','ngDialog']) 

.directive("postbutton", function(){ 
return { 
    restrict: "E", 
    bindToController: true, 
    template: "<button>Post review</button>"   
} 
}) 

.controller('RandomBusinessCtrl', 
    ['$scope','postbutton','pickRandomBusinesses','BusinessViewModel','config', 
    function ($scope,postbutton,pickRandomBusinesses,BusinessViewModel,config) { 

    }); 

мой HTML является:

<div ng-controller="RandomBusinessCtrl"> 
<span class="badge pull-right" style="background-color:#CB525B;" > 
     <postbuttons></postbuttons> 
    <!-- <button type="button" value="post_business" style="background-color:#CB525B; height:15px;border:0px;`" ng-click="postReview(random_business.id,user_id,rate,price,date_created,details)">Post review</button> --> 
    </span> 

+1

Пожалуйста, добавьте еще немного кода или предоставить plunker – varit05

+0

вы не можете впрыснуть директиву внутри контроллера ...... удалить postbutton из RandomBusinessCtrl –

ответ

2

why does my directive throws $unknown provider

Потому что вы пытаетесь ввести директиву в контроллер. Это не имеет смысла - вы можете только вводить услуги.

Почему директивы не подлежат инъекции? Ясно, что можно использовать свой API от контроллера? Ну, причина в том, что основная или угловая архитектура приложения. Директивы, являющиеся частью уровня представления приложения, не должны напрямую взаимодействовать с контроллером. Еще одна важная вещь, которую нужно понять, - это то, что услуги (то, что вы вводите) являются намеренно одиночными, в то время как директивы не могут быть, конечно.

В вашем случае вам не нужно беспокоиться об этом: директива зарегистрирована на том же модуле, что и в шаблоне.

Правильное определение контроллера будет:

.controller('RandomBusinessCtrl' [ 
    '$scope', 'pickRandomBusinesses', 'BusinessViewModel', 'config', 
    function ($scope, pickRandomBusinesses, BusinessViewModel, config) { 

}); 
+0

да ваше право. –

+0

Человек, который вы лучший .. Спасибо большое за информацию .. Хотя я потерял свою кнопку, не могу видеть ее на интерфейсе больше – henrybbosa

+0

Рад, что это было полезно. Почему ваша кнопка ушла - что-то с вашим приложением, из опубликованного кода это невозможно сказать. – dfsq

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