我有一个角度驱动的表单,使用$ dirty来查找启用/禁用提交按钮的更改。
表单的一部分使用指令上传徽标,但表单注意到这是一个已更改的元素,因此在设置一个大小有效的徽标时,我需要手动触发表单已更改,所以应该是一个案例of formName。$ setDirty();但是控制台说没有定义$ setDirty(),我认为这是因为我在一个指令中。
在我的指令控制器中选择文件后,我调用下面的函数,当文件有效时,我想调用setdirty方法。
function isFileValid(file) {
vm.fileValid = true;
vm.errorMessage = "";
if (file.size > 16777216) {
vm.errorMessage = "The File is too big!";
vm.fileValid = false;
} else if (file.size == 0) {
vm.errorMessage = "The File is empty!";
vm.fileValid = false;
}
if (vm.fileValid) {
// make form dirty
$setDirty();
}
return vm.fileValid;
}
这是指令JS
(function () {
'use strict';
.module("tpBusinessProfile")
.directive("tpLogoUploader", tpLogoUploader);
function tpLogoUploader() {
return {
templateUrl: "tpLogoUploader.directive.html",
bindToController: true,
scope: {
changedMethod: "&"
},
controller: "tpLogoUploaderCtrl",
controllerAs: 'logoCtrl',
restrict: "E"
};
}
})();
感谢任何帮助。
答案 0 :(得分:3)
您需要使用指令require选项并要求form指令的控制器:
{
require: '^form'
然后在您需要的范围内的链接函数绑定方法(脏解决方案):
link(scope, elem, attrs, formController){
scope.makeFormDirty = formController.$setDirty
}
现在您可以通过makeFormDirty