2017-05-22 19 views
0

我加入这个my-resize指令:这个简单的指令,角度抱怨未知的提供者?

<body ng-controller="MainCtrl" my-resize="resize"> 
    <p>width:{{width}} height:{{height}}</p> 
</body> 

,其中resize是在MainCtrl控制器(请参阅:http://plnkr.co/edit/Z8ckbLbRcA6P6XqzU1fx)中定义的函数

该指令是非常简单的:

app.directive('myResize', function($scope){ 
    return{ 
     restrict: 'A', 
     scope: { 
      ngResize: '&' 
     }, 
     link: function($scope, $elem, $attr){ 
      $scope.$on('resize', ngResize); 

     } 
    }; 
}); 

然而,我得到错误:$注射器:未知未知供应商,我不知道为什么。

回答

1

var app = angular.module('app', []); 
 

 
app.directive('myResize', ['$window', function($window) { 
 
\t return { 
 
\t \t link: function(scope, elem, attrs) { 
 
\t \t \t scope.onResize = function() { 
 
\t \t \t \t scope.height = $window.innerHeight; 
 
     scope.width = $window.innerWidth; 
 
\t \t \t } 
 
\t \t \t scope.onResize(); 
 

 
\t \t \t angular.element($window).bind('resize', function() { 
 
\t \t \t \t scope.onResize(); 
 
\t \t \t \t scope.$apply(); 
 
\t \t \t }) 
 
\t \t } 
 
\t } 
 
}])
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app="app"> 
 
    
 
    <div my-resize> 
 
    
 
    window height: {{height}} 
 
    window width:{{width}}<br /> 
 
    </div> 
 
</div>

$范围不能被注入指令。您已经更改了代码以在指令的控制器中注入$ scope。

$ scope不是一个服务($ scopeProvider不存在于角度js中)它是一种特殊的东西,通过角本身作为$ rootScope的子元素注入到控制器中。

所以你不能明确地注入服务,指令等等。

你可以直接在direcitve控制器中注入(不直接指向指令)。

http://plnkr.co/edit/mxEMXxIKOrJtRqQa4IQb?p=preview

+0

好了,但是当我从我得到的“多指令资源争用”的错误,因为我有两个隔离的范围指令删除'$ scope'。 – Grzegorz

+0

如果你想查找高度和宽度,你可以使用我在代码片段中附加的指令。同时,我会尽力解决你的指示,并会送你回去 –

+0

看起来你给我带来了一个更好的理解。问题的确是范围,当我在同一个DOM元素中使用controller和指令时,这可能是角度限制。我现在需要的是在'link'函数中获取'attr',它保存'my-resize'属性并将其值转换为函数调用。应该这样做。我正在提高你的答案,但我不会将其标记为解决方案,因为它尚未解决问题。谢谢,Ananth。我现在将处理这个回调。 – Grzegorz

相关问题