AngularJS - 如何在我的指令中访问templateUrl中定义的表单?

时间:2014-09-10 17:20:47

标签: angularjs forms angularjs-directive scope

我正在尝试访问我的指令中的表单以进行验证,因此我想要访问$ setPristine,但是,我似乎无法弄清楚如何获取表单&#39 ; s使用templateUrl创建。

我有一个详细说明这个问题的傻瓜:http://plnkr.co/edit/Sp53xzdTbYxL6DAue1uV?p=preview

我收到错误:

Controller 'form', required by directive 'testDirective', can't be found!

以下是相关的Plunker代码:

的.js:

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

app.directive("testDirective", function() {
  return {
    restrict: 'E',
    scope: {},
    templateUrl: "formTemplate.html",
    require: "^form",  // <-- doesn't work
    link: function (scope, element, attrs, ctrl) {
      console.log(ctrl);

      scope.open = function() {
          // Would like to have access to the form here
          // ctrl.$setPristine();
      }
    },
    controller: function($scope) {
      $scope.firstName = "Mark";

      $scope.save = function(form) {
        console.log(form);
      }
    }
  }
})

formTemplate.html:

<form name="testForm" ng-click="save(testForm)">
  <input type="text" ng-model="firstName" />
  <br>
  <input type="submit" value="Save" />
</form>

如何将formTemplate.html中的表单附加到我的指令的隔离范围?

1 个答案:

答案 0 :(得分:0)

http://plnkr.co/edit/41hhRPKoIsZ9C8Y9Yi87?p=preview

在你的指令中试试这个:

var form1 = element.find('form').eq(0);
formCtrl = form1.controller('form');
console.log(formCtrl);

这应该抓住表格的控制器。