調用控制器函數在一個angularjs項目中,我使用一個指令來上傳文件,方法是將它們拖放到一個dropzone中。在指令中,我需要調用在我的控制器中定義的函數。AngularJs - 從指令
下面是我在做什麼:
(function() {
'use strict';
angular
.module('app')
.controller('myController', myController)
.directive('fileDropzone', function() {
return {
restrict: 'A',
scope: {
file: '=',
fileName: '=',
test: '&callbackFn',
},
link: function (scope, element, attrs) {
var processDragOverOrEnter;
processDragOverOrEnter = function (event) {
if (event != null) {
event.preventDefault();
}
event.dataTransfer.effectAllowed = 'copy';
return false;
};
element.bind('dragover', processDragOverOrEnter);
element.bind('dragenter', processDragOverOrEnter);
return element.bind('drop', function (event) {
var file, reader;
if (event != null) {
event.preventDefault();
}
reader = new FileReader();
reader.onload = function (evt) {
console.log(reader.result);
scope.test({});
};
file = event.dataTransfer.files[0];
reader.readAsText(file);
return false;
});
}
};
});
function myController()
{
var vm = this;
vm.test = function() {
console.log("It works !");
};
}
})();
HTML文件:
<div class="container">
<md-content file-dropzone layout="column" layout-align="center center" class="md-list-item-text" md-whiteframe="1" style="padding:1em;margin:0.5em 0.5em;" flex>
File drop zone
</md-content>
</div>
雖然執行console.log(reader.result)指令確實顯示在控制檯中的文件內容,消息「有用 !」沒有顯示,這意味着函數test()永遠不會被調用。
我在做什麼錯?
添加HTML文件信息也.. –
爲您創建隔離範圍,然後在那裏你使用任何控制器的內部指令,在那裏你會得到它的實例使用''CTRL作爲第四個參數鏈接功能 –
然後你可以調用控制器的功能 –