TypeError:无法使用ng-cropper指令读取未定义的属性“bind”

时间:2016-01-13 07:15:05

标签: javascript jquery angularjs angularjs-directive

我正在接收TypeError: Cannot read property 'bind' of undefined.当我尝试加载ng-cropper指令时,这是一个cropper javascript图像裁剪库的角度绑定。我不完全确定哪些代码与show最相关,但这是指令的上半部分:

angular.module('ngCropper', ['ng'])
.directive('ngCropper', ['$q', '$parse', function($q, $parse) {
  return {
    restrict: 'A',
    scope: {
      options: '=ngCropperOptions',
      proxy: '=ngCropperProxy', // Optional.
      showEvent: '=ngCropperShow',
      hideEvent: '=ngCropperHide'
    },
    link: function(scope, element, atts) {
      var shown = false;

      scope.$on(scope.showEvent, function() {
        if (shown) return;
        shown = true;

        preprocess(scope.options, element[0])
          .then(function(options) {
            debugger;
            setProxy(element);
            element.cropper(options);
          })
      });

      function setProxy(element) {
        if (!scope.proxy) return;
        var setter = $parse(scope.proxy).assign;
        setter(scope.$parent, element.cropper.bind(element));
      }

setter(scope.$parent, element.cropper.bind(element));函数中的setProxy()行会抛出错误。

这是因为cropper显然未在元素变量上定义。什么会导致这个?我不是角度指令的专家,但我想如果标签设置如此,它应该解决好吗?  

奇怪的是,它在演示应用程序中解析得很好,我的代码反映了相同的设置!我唯一的猜测可能是我可能正在使用的另一个模块可能会干扰?我不愿意全力以赴,但可能会归结为此。

我的模块声明为: angular.module('app', [ 'ui.router', 'ngMessages', 'ngSanitize', 'LocalStorageModule', 'angular.filter', 'flow', 'ng-sortable', 'focus-if', 'ngCropper', 'controllers', 'services', 'directives', 'filters'])

我提到了这个演示,尽我所能 - https://github.com/koorgoo/ngCropper/tree/master/demo

我想,

  1. 'cropper'应该以什么为基础解决? (所以我知道要检查什么)
  2. 你能看到我的代码有任何明显的问题吗?

1 个答案:

答案 0 :(得分:3)

您需要在加载依赖项时保持精确的顺序,并且应首先在AngularJS和其他人之前加载jQuery,如示例HTML here中所示。

<script src="../bower_components/jquery/dist/jquery.min.js"></script>
<script src="../bower_components/angular/angular.min.js"></script>
<script src="../bower_components/cropper/dist/cropper.js"></script>
<link href="../bower_components/cropper/dist/cropper.css" rel="stylesheet">
<script src="../ngCropper.js"></script>