我可以访问控制器中的表单吗?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (34)

我目前正在使用以下内容。

$scope.$$childHead.customerForm[firstName],以便:

<form name="customerForm">
  <input type="text" name="firstName" 
         ng-model="data.customer.firstName" 
         tabindex="1"  
         ng-disabled="!data.editable" 
         validationcustomer />
</form>

但这只适用于Chrome。现在,我尝试了以下几点:

$scope.editCustomerForm[firstName],以便:

<form name="customerForm" ng-model="editCustomerForm">
  <input type="text" name="firstName" 
         ng-model="data.customer.firstName" tabindex="1"  
         ng-disabled="!data.editable" 
         validationcustomer />
</form>

这不管用。注意,我的表单在一个基金会选项卡中。我怎样才能进入firstName?

编辑::看起来像是form未添加到scope当它在一个基金会标签里的时候。

有人找到解决办法了吗?

提问于
用户回答回答于

可以将表单附加到在父控制器中定义的某个对象。然后你就可以达到你的形式,甚至从一个孩子的范围。

父控制器

$scope.forms = {};

子作用域中的某些模板

<form name="forms.form1">
</form>

问题是,在执行控制器中的代码时,不必定义表单。所以你必须这样做

$scope.$watch('forms.form1', function(form) {
  if(form) {
    // your code...
  }
});
用户回答回答于

虽然在其他评论中提到过,但我想我应该为那些使用“Controller作为”语法的人详细说明一下:

<div ng-controller="MyController as ctrl">

<form name="ctrl.myForm">
    ...inputs
    Dirty? {{ctrl.myForm.$dirty}}

    <button ng-click="ctrl.saveChanges()">Save</button>
</form>

</div>

然后,可以访问代码中的FormController,如下所示:

function MyController () {
    var vm = this;
    vm.saveChanges = saveChanges;

    function saveChanges() {

       if(vm.myForm.$valid) { 
            // Save to db or whatever.
            vm.myForm.$setPristine();
       }
}

扫码关注云+社区