我正在接收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
我想,
答案 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>