Angular用这个简单的指令抱怨未知的提供者?

时间:2017-05-22 22:16:17

标签: angularjs

我正在添加此my-resize指令:

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

,其中resizeMainCtrl控制器中定义的函数(参见:http://plnkr.co/edit/Z8ckbLbRcA6P6XqzU1fx

该指令非常简单:

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

        }
    };
});

但我得到错误:$ injector:unpr未知提供商,我不知道为什么。

1 个答案:

答案 0 :(得分:1)

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

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

			angular.element($window).bind('resize', function() {
				scope.onResize();
				scope.$apply();
			})
		}
	}
}]) 
&#13;
<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>
&#13;
&#13;
&#13;

$ scope不能注入指令。您已更改代码以在指令控制器中注入$ scope。

$ scope不是一个服务(在角度js中不存在$ scopeProvider)它是一个特殊的东西,由angular本身作为$ rootScope的子节点注入控制器。

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

你可以在direcitve的控制器中明确地注入它(而不是直接注入指令)。

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