angularjs组件在模板中获取表单

Lun*_*una 11 angularjs angularjs-components

所以我有一个包含表单的模板的组件.

mycomponent.html:

<div>
    <form name="myForm"> 
        <!-- more html code -->
    </form>
</div>
Run Code Online (Sandbox Code Playgroud)

如何在组件控制器中访问myForm?目前我正在注入$ scope来从中获取它.或者这是获得表格的唯一方法吗?

编辑:添加一些代码,以更好地说明在JavaScript中

angular.module('example')
.component('myComponent', {

    templateUrl: 'mycomponent.html',
    controller: function($scope) {
         $scope.myForm // This works
         this.myForm // undefined, can I access it through the component scope instead of $scope somehow? 
    }
 });
Run Code Online (Sandbox Code Playgroud)

Dav*_*ave 23

name表单的属性是用于决定绑定内容的角度.因此,如果您使用的是controllerAs语法,则必须在表单名称中使用它:

  <body ng-controller="MainCtrl as vm">
    <form name='vm.myForm'>
    </form>
  </body>
Run Code Online (Sandbox Code Playgroud)

这将允许您在控制器中引用它而不使用$ scope,但仅在成功创建控制器之后:

app.controller('MainCtrl', function($scope, $timeout) {

    var vm = this;

    console.log(vm.myForm);  // undefined

    $timeout(function() {
        console.log(vm.myForm);  // FormController object
    }, 100);
});
Run Code Online (Sandbox Code Playgroud)

这是一个工作的插件.

  • 您使用的是 angular 1.5 吗?它会自动添加 `$ctrl` 作为 `controllerAs` 的默认值,即使对于组件也是如此。 (2认同)
  • 是的,<form name ='$ ctrl.myForm'>适用于组件,但正如royka指出的那样你可以在postLink钩子中访问它 (2认同)