指令控制器内的角度设置脏形式

时间:2016-02-10 07:21:22

标签: angularjs angular-directive

我有一个角度驱动的表单,使用$ 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"
    };
}

})();

感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

您需要使用指令require选项并要求form指令的控制器:

{
     require: '^form'

然后在您需要的范围内的链接函数绑定方法(脏解决方案):

  link(scope, elem, attrs, formController){
      scope.makeFormDirty = formController.$setDirty
  }

现在您可以通过makeFormDirty

在控制器中使用它了