在angular-material md-dialog

时间:2016-04-20 18:03:43

标签: javascript angularjs angularjs-scope angular-material angular-directive

  

Plunker可用here

我想在angular-material md-dialog中包含一个带有必需^form的指令(示例中的第一个指令)。 显示对话框时,表示无法找到表单时出错:

[$compile:ctreq] Controller 'form', required by directive 'first', can't be found!

我正在使用require:^form,因为我希望使用ng-messages验证指令中父表单的某些字段。对话框外的指令按预期工作,表单输入正确验证,问题只发生在对话框中使用指令时。

我试图在没有require:^form的情况下包含另一个指令(示例中的第二个指令),并且它在对话框中正确显示,但在这种情况下输入无法验证

我的问题是:当在对话框之外定义表单时,有没有办法在md对话框中使用带有“form required”的指令?

我想这是因为mdDialog正在创建自己的范围...我已经尝试传递当前范围,创建一个新范围等等但到目前为止没有成功。

问题可以很容易地在附带的plunker中重现。

相关参考资料来源:

function first() {
    var directive = {
      restrict: 'EA',
      scope: {
        param: '@'
      },
      require: '^form',
      bindToController: true,
      template: '<md-input-container class="md-block"><label>Street with validation</label><input name="street" ng-model="vm.street" required><div ng-messages="form.street.$error"><div ng-message="required">Required</div></div></md-input-container>',
      controller: FirstController,
      controllerAs: 'first',
      link: function(scope, element, attrs, form) {
        scope.form = form;
      }
    };

    FirstController.$inject = [];

    function FirstController() {
      var first = this;
    }
    return directive;
  }


function openDialogFail(event) {
  $mdDialog.show({
    template: '<md-dialog><md-dialog-content><first/></md-dialog-content></md-dialog>',
    targetEvent: event,
    controller: () => this //,
      // scope: $scope.$new()
  });
}

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

从评论中摘录:

  

我仍然没有得到用例,但是阻止你将<first />包裹在codepen.io/z00bs/pen/vGaBgm

中的单独<form>