2016-02-10 108 views
1

我有一個使用$ dirty的角度驅動表單,用於查找啓用/禁用提交按鈕的更改。角度設置指令控制器內的髒形式

表單的一部分使用指令上傳徽標,但表單注意到這是一個更改的元素,所以在設置一個標識驗證大小時,我需要手動觸發表單進行了更改,因此應該是大小寫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

您需要使用指令要求的選項,需要形式指令的控制器:

{ 
    require: '^form' 

,然後在鏈接功能綁定方法,你需要你的範圍(骯髒的解決方案):

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

現在你可以通過你的控制器使用它makeFormDirty

+0

感謝您的快速回復,我添加了要求和鏈接到我的指令,但表單提交按鈕始終可以選擇爲它在頁面加載後似乎是setdirty。如果我註釋掉scope.makeFormDirty = formController。$ setDirty(),那麼提交按鈕仍然被鎖定;在這個階段,我甚至沒有打過makeformDirty。謝謝 – user3779703

+0

對不起,當然它應該是'scope.makeFormDirty = formController。$ setDirty'不是'$ setDirty()' –

+0

嗨,非常感謝提交按鈕現在仍然鎖定,這是正確的 - 但是當從我的指令調用makeFormDirty時不解鎖提交按鈕我是否需要引用類似於提交按鈕點擊狀態的表單名稱是由ng-disabled =「myForm。$ invalid || myForm。$ pristine」控制的, – user3779703