【发布时间】:2014-06-20 11:33:48
【问题描述】:
我收到上述错误。我需要帮助修复它。我查看了this question,它似乎对我一点帮助都没有,我在与需要它的指令相同的元素上有所需的指令。我也不明白为什么我的错误说找不到指令“绘图”所需的控制器“绘图”。不应该说指令'canvasSizer'需要'绘图'控制器吗?
这是我的简化代码,完整代码参见 plnkr。
angular.module("drawingDirective", [])
.directive("drawing", function(){
return {
restrict: "A",
scope: {},
link: function(scope, element){
var canvas = element[0];
var ctx = canvas.getContext('2d');
var $canvas = $(canvas);
this.resize = function () {
// save the canvas content as imageURL
var data=canvas.toDataURL();
// resize the canvas
canvas.width*= window.innerWidth;
canvas.height*= window.innerHeight;
// scale and redraw the canvas content
var img=new Image();
img.onload=function(){
ctx.drawImage(img,0,0,img.width,img.height,0,0,canvas.width,canvas.height);
}
};
}
};
})
.directive("canvasSizer", function () {
return {
restrict: "A",
require: "drawing",
link: function(scope, element, drawingCtrl){
//first call of tellAngular when the dom is loaded
document.addEventListener("DOMContentLoaded", drawingCtrl.resize, false);
//calling tellAngular on resize event
window.onresize = drawingCtrl.resize;
}
};
});
我的 html 引导应用程序并在其中包含以下 div。
<canvas drawing canvas-sizer></canvas>
这是我一直在努力的plunker。
【问题讨论】:
-
您的
drawing指令没有控制器,因此出现错误。查看controller属性,您可以使用该属性指定用于指令的控制器......您可能会将指令链接函数中的一些代码移动到控制器中。 -
当您在指令中使用“require”时,您要求的是所需指令的控制器。指令通过控制器公开它们的“API”。查看 ngModel/ngModelCtrl 的来源以及另一个指令如何包含和使用它。
标签: javascript angularjs