Javascript AngularJs:如果无法从控制器访问,则在ng内形成

Javascript AngularJs:如果无法从控制器访问,则在ng内形成,javascript,angularjs,Javascript,Angularjs,我在ng if指令中有一个表单。我想使用$valid检查控制器中的表单验证 <div ng-if="paymentMethod == 12"> <form name="creditForm" id="cc-form" novalidate> <div class="form-group"> <label for="cardNumber">Card Number</label>

我在
ng if
指令中有一个表单。我想使用
$valid
检查控制器中的表单验证

    <div ng-if="paymentMethod == 12">
    <form name="creditForm" id="cc-form" novalidate>
        <div class="form-group">
            <label for="cardNumber">Card Number</label>
            <input type="text" autofocus class="form-control" name="card_number" ng-minlength="16" id="cardNumber" ng-model="creditCardNumber" required>
            <div class="red-text" ng-messages="creditForm.card_number.$error" ng-if="creditForm.card_number.$dirty || creditForm.$submitted">
                <div ng-message="required">##global.Card_Num_Required##</div>
                <div ng-message="maxlength">##global.Card_Num_MinLength##</div>
                <div ng-message="minlength">##global.Card_Num_MaxLength##</div>
                <div ng-message="minlength">##global.Card_Num_Numeric ##</div>
            </div>
        </div>

但是无法从控制器访问表单。

ngIf指令基于{expression}删除或重新创建DOM树的一部分。如果指定给ngIf的表达式的计算结果为假值,则该元素将从DOM中删除,否则将该元素的克隆重新插入DOM。 你可以通过这个链接,也可以在这里找到我的答案


如果可行,可以使用ng show而不是ng。

这是因为ngIf创建了一个新范围,因此name=“form”将在该新范围(ctrl范围的子范围)上注册表单控制器。您可以通过绑定到目标范围上的现有对象来解决这个问题。(或者,您可以绑定到控制器并使用controllerAs语法,这通常被认为是一种良好的做法。)

$scope.$watch('creditForm.$valid', function(newVal) {
            //$scope.valid = newVal;
            alert('valid');
        });
这是因为原型继承在JavaScript中是如何工作的

你可以在这里找到一个样品

在控制器中使用辅助对象时,它可以正常工作

在控制器文件中

$scope.page = {
    creditForm:null
};
在HTML文件中

<div ng-if="paymentMethod == 12">
<ng-form name="page.creditForm" id="cc-form" novalidate>
    <div class="form-group">
        <label for="cardNumber">Card Number</label>
        <input type="text" autofocus class="form-control" name="card_number" ng-minlength="16" id="cardNumber" ng-model="creditCardNumber" required>
        <div class="red-text" ng-messages="page.creditForm.card_number.$error" ng-if="page.creditForm.card_number.$dirty || page.creditForm.$submitted">
            <div ng-message="required">##global.Card_Num_Required##</div>
            <div ng-message="maxlength">##global.Card_Num_MinLength##</div>
            <div ng-message="minlength">##global.Card_Num_MaxLength##</div>
            <div ng-message="minlength">##global.Card_Num_Numeric ##</div>
        </div>
    </div>
</ng-form>

卡号
##global.Card_Num_必填项##
##global.Card\u Num\u MinLength##
##global.Card\u Num\u MaxLength##
##global.Card\u Num\u Numeric##


在此模型中,如果尝试删除
$parent
,您可以在ng中安全地使用ng表单?
<div ng-if="paymentMethod == 12">
<ng-form name="page.creditForm" id="cc-form" novalidate>
    <div class="form-group">
        <label for="cardNumber">Card Number</label>
        <input type="text" autofocus class="form-control" name="card_number" ng-minlength="16" id="cardNumber" ng-model="creditCardNumber" required>
        <div class="red-text" ng-messages="page.creditForm.card_number.$error" ng-if="page.creditForm.card_number.$dirty || page.creditForm.$submitted">
            <div ng-message="required">##global.Card_Num_Required##</div>
            <div ng-message="maxlength">##global.Card_Num_MinLength##</div>
            <div ng-message="minlength">##global.Card_Num_MaxLength##</div>
            <div ng-message="minlength">##global.Card_Num_Numeric ##</div>
        </div>
    </div>
</ng-form>