AngularJS错误:无法找到指令'drawing'所需的控制器'drawing'

时间:2014-05-03 23:31:01

标签: javascript angularjs

我收到了上述错误。我需要帮助修复它。我已经查看了this question,它似乎对我没有任何帮助,因为我需要与指令要求相同的元素。我也不知道为什么我的错误表明控制器'绘图',指令' drawing',无法找到。不应该说'绘图'指令' 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

2 个答案:

答案 0 :(得分:2)

工作(我认为)你的傻瓜:http://plnkr.co/edit/sEZCyyC8dZOTo2LWcdc9?p=preview

更改了一些内容,将大部分链接内容移动到控制器中以支持将其暴露给其他指令。稍微更改了缩放功能(对于新的画布大小,它正在做* =)

这也不见了:

img.src=data;

检查出来,希望有所帮助!

答案 1 :(得分:1)

正如Sunil评论的那样,简单的答案是当你require一个指令时,你要求它的控制器作为第四个参数传递给你的链接函数(不是第三个参数),如你的代码所示。 / p>

由于你想在drawingCtrl上使用resize属性,你应该给你的绘图指令一个控制器并在那里移动这个功能。请参阅&#34;创建通信指令&#34;这里: https://docs.angularjs.org/guide/directiveAs