I have seen these problems before, and this is usually due to options, etc., but I have a very simple example that I cannot get to work.
I have a directive:
.directive('imageFileInput', function () {
return {
restrict: 'A',
transclude: true,
templateUrl: '/assets/tpl/directives/imageFileInput.html',
scope: {
onComplete: "&imageFileInput"
},
link: function (scope, element, attr) {
var input = element.find("input");
var preview = function () {
if (input) {
var fileReader = new FileReader();
var file = input[0].files[0];
fileReader.readAsDataURL(file);
fileReader.onload = function (e) {
scope.$apply(function () {
scope.thumbnail = e.target.result;
if (scope.onComplete) {
scope.onComplete();
}
});
};
}
};
input.bind('change', function () {
preview();
});
}
};
});
and the template is as follows:
<div class="thumbnail">
<input type="file" accept="image/*" />
<img src="{{ thumbnail }}" ng-if="thumbnail" />
<div class="caption" ng-transclude>
</div>
</div>
Pretty simple so far, it's just a directive that creates a good view for entering a file. Thus, the declaration of this directive in my opinion looks as follows:
<div id="{{ panel.id }}" image-file-input="controller.upload()">
{{ panel.title }}
</div>
and in my controller I have this function:
.controller('EditKitGraphicsController', ['GarmentService', 'garment', function (garments, garment) {
var self = this;
self.garment = garment;
self.upload = function () {
console.log('uploading');
};
}])
So if I break this:
- My directive isolates the scope and expects a callback function called onComplete, which is passed with the declaration of the directive (ie image-file-input = "callback ()")
- $apply
- (),
- , upload, console.log.
- ...
- , ?