我正在添加此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);
}
};
});
但我得到错误:$ injector:unpr未知提供商,我不知道为什么。
答案 0 :(得分:1)
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;
$ scope不能注入指令。您已更改代码以在指令控制器中注入$ scope。
$ scope不是一个服务(在角度js中不存在$ scopeProvider)它是一个特殊的东西,由angular本身作为$ rootScope的子节点注入控制器。
所以你不能在服务,指令......等中明确地注入它。
你可以在direcitve的控制器中明确地注入它(而不是直接注入指令)。