11

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

我的组件.html:

<div>
    <form name="myForm"> 
        <!-- more html code -->
    </form>
</div>

如何在组件控制器中访问 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? 
    }
 });
4

2 回答 2

25

表单的name属性是 Angular 用来决定绑定什么的。因此,如果您使用的是 controllerAs 语法,则必须在表单名称中使用它:

  <body ng-controller="MainCtrl as vm">
    <form name='vm.myForm'>
    </form>
  </body>

这将允许您在不使用 $scope 的情况下在控制器中引用它,但只能在成功创建控制器之后:

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

    var vm = this;

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

    $timeout(function() {
        console.log(vm.myForm);  // FormController object
    }, 100);
});

这是一个工作plunk

于 2016-03-17T17:23:54.650 回答
1

使用名称语法,但也使用组件 postLink 生命周期钩子,一旦连接模板和控制器,就会调用该函数,请参阅https://docs.angularjs.org/guide/component

于 2016-11-29T14:31:17.873 回答