1

我是 Angular 的新手,我正在尝试指令。

我希望能够使用

<div ng-messages="form.$error">
    <div ng-message="required">You did not enter a field</div>
</div>

在这样的自定义指令中,

<div class="form-group">
    <label class="form-label" for="s-input-{{name}}">
        {{text.human}}
        <span ng-if="text.subtext" class="form-hint">{{text.subtext}}</span>
    </label>

    <select ng-required="required" ng-model="model" class="form-control"  id="s-input-{{name}}" name="{{name}}" ng-options="t for t in text.select"></select>
    <div ng-messages="form.$error">
        <div ng-message="required">You did not enter a field</div>
    </div>
</div>

我可以通过在指令元素下方但不在其中传递使用 ng-messages 来使其工作。

虽然我真的不知道如何将表单传递给模板,以便 ng-messages 可以访问它。

我已经设置了一个 plunker 来向您展示我的基本设置。

http://plnkr.co/edit/ELx6Fd2eLN4CJjEnzRGM?p=preview

我知道我需要使用表单,require: '^form',尽管我不确定如何在模板 URL 中使用/访问。

我已经敲了一段时间的头,所以非常感谢一些帮助!谢谢。

4

2 回答 2

3

当您需要表单指令时,请在函数require: '^form'中访问该 FormController 。link然后,您可以简单地将该控制器附加到指令的范围,如下所示:

link: function(scope, element, attributes, formController) {
    scope.form = formController;
}

然后在模板中引用它:

<div ng-messages="form.$error">
    <div ng-message="required">You did not enter a field</div>
</div>
于 2016-04-15T20:36:43.353 回答
1

您始终可以将表单传递给您的指令。

javascript

app.directive('selectGov', function (){ 
   return {
        restrict: 'E',
        templateUrl: 'select.html',
        scope: {
            text: "=?",
            model: "=",
            required: "=",
            selectItems: "=?",
            name: "@?",
            form: "="
        },
    };
});

html

<select-gov model="person.phoneNumberType" text="q.phoneType" required="true" name="phoneType" form="myForm"></select-gov>
于 2016-04-15T20:45:08.657 回答