簡體   English   中英

檢查沒有名稱的ng-form的有效性

[英]Check validity of ng-form with no name

如何檢查沒有名稱的ng-form的有效性?

<div ng-form>
  <input required name="xxx" />
  <p>valid: {{$valid}}</p>
  <p>pristine: {{$pristine}}</p>
</div>

通常用我會做的名字

<div ng-form="test">
  <input required name="xxx" />
  <p>valid: {{test.$valid}}</p>
  <p>pristine: {{test.$pristine}}</p>
</div>

但是我有一條指令,它會在頁面上吐出多個ng形式,並且它們的名稱在范圍內沖突。 所以我不想給他們一個名字,而不是試圖給他們所有唯一的名字。

您可以為每種表單編寫指令嗎? 在沒有看到更多代碼的情況下,我編寫了兩個指令-一個用於表單容器本身,另一個用於其中的輸入:

var mod = angular.module("myApp", []);

mod.directive("myForm", function () {
    return {
        restrict: "A",
        transclude: true,
        template: '<div ng-form ng-transclude></div>',
        replace: true,
        scope: true,
        controller: function () {}
    }
});

mod.directive("myInputs", function () {
    return {
        restrict: "A",
        require: ["^form", "^myForm"],
        template: '<div><input ng-model="name" required name="xxx" /><p>valid: {{form.$valid}}</p><p>pristine: {{form.$pristine}}</p></div>',
        replace: true,
        link: function (scope, element, attrs, ctrls) {
            scope.form = ctrls[0];
        }
    }
});

HTML如下所示(根據需要重復使用指令多次):

<div ng-app="myApp">
    <div my-form>
        <div my-inputs></div>
    </div>
    <div my-form>
        <div my-inputs></div>
    </div>
    <div my-form>
        <div my-inputs></div>
    </div>
</div>

我正在做的是使用容器表單(myForm指令)創建不帶名稱的ng表單。 然后,“子”指令需要“窗體”和“ myForm”(從父級獲取)。 一旦有了它,它將窗體控制器綁定到范圍(原型通常由父級繼承,因此不會發生沖突)。 我還必須給輸入一個ng模型,以便它使用表單注冊自己。

參見jsfiddle進行演示: http : //jsfiddle.net/Cv8zH/

每個my-form指令都維護$ valid和$ pristine而不需要名稱。

更新:如果每種表單需要不同的輸入,則可以執行類似的操作,只需將輸入包括在內即可:請參閱更新的提琴: http : //jsfiddle.net/Cv8zH/1/

<div ng-app="myApp">
    <div my-form>
        <div my-inputs>
            Name: * <input name="myName" ng-model="name" required><br>
            Phone: * <input name="myPhone" ng-model="phone" required ng-pattern="/\d{3}-\d{4}/">
              <p>valid: {{form.$valid}}</p>
              <p>pristine: {{form.$pristine}}</p>
        </div>
    </div>
    <div my-form>
        <div my-inputs>
            Hobby: <input name="hobby" ng-model="hobby">
              <p>valid: {{form.$valid}}</p>
              <p>pristine: {{form.$pristine}}</p>    
        </div>
    </div>
    <div my-form>
        <div my-inputs>
            Address: * <input name="address" ng-model="address" required>
              <p>valid: {{form.$valid}}</p>
              <p>pristine: {{form.$pristine}}</p>
        </div>
    </div>
</div>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM