为什么我的指令会抛出$ unknown provider

时间:2016-07-12 08:38:13

标签: angularjs angularjs-directive

未知提供商错误:  [$ injector:unpr] http://errors.angularjs.org/1.4.3/ $ injector / unpr? P0 = postbuttonsProvider%20%3 C-%20postbuttons%20%3 C-%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 个答案:

答案 0 :(得分:2)

  

为什么我的指令会抛出$ unknown provider

因为您正在尝试将inject命令注入控制器。它没有意义 - 你只能注入服务。

为什么指令不可注射?显然,人们可能希望从控制器中使用其API?那么,原因是核心或Angular应用程序架构。指令是应用程序视图层的一部分,不应直接与控制器进行交互。另一个需要理解的重要事项是,服务(你注入的内容)是故意单例 - 当然,指令不可能。

在您的情况下,您不必担心:指令已在同一模块上注册,因此可在模板中使用。

正确的控制器定义是:

    SELECT p.*, n.name, n.lang
    FROM products p
    LEFT JOIN product_names n 
      ON (p.product_id = n.product_id AND n.name ILIKE 'nestle%')
    WHERE
        p.status IN ('A','1','5','9')
        AND (p.producer ILIKE 'nestle%' OR n.name IS NOT NULL)
    LIMIT 1