angularjs指令内部控制的必需属性

时间:2018-07-11 22:26:02

标签: javascript html angularjs angularjs-directive

我正在努力解决以下问题。我们有一个称为Deeplink的指令。它具有以下代码:

restrict: 'E',
require: 'ngModel',
scope: {
    smDropdown: '=smDeeplinkDropdown',
    settings: '&smDropdownSettings',
    onRefresh: '&smOnRefresh',
    onModelChange: "&?smOnChange",
    disable: "=?",
    valueRequired: "=?",
    hideNew: "=?",
    excludeValue : "=?"
},
templateUrl: 'app/templates/smDeeplinkDropdown',

该指令的模板如下:

<div class="row input-group">
    <select name="deeplinkDropdown"
            class="form-control dropdown deeplinkDropdown"
            ng-disabled="disable"
            ng-required="valueRequired"
            data-ng-model="dropdownModel.key"
            data-ng-options="item.key as item.text disable when item.hidden for item in itemList | filter:ngOptionFilter"
            data-ng-change="modelChanged(dropdownModel.key)">
        <option value="">{{noneSelectedLabel}}</option>
    </select>

我仅在此处显示相关信息,而不显示整个HTML或整个代码。无论如何,我正在为选择该属性而苦苦挣扎。在我的表单中,我有以下内容:

<div data-sm-deeplink-dropdown="crud.metaData.vendors"
     data-ng-model="crud.model.vendorId"

     value-required="true"
     name="vendorId"
     id="vendorId"
     data-sm-dropdown-settings="crud.getVendorSettings()"
     data-sm-on-refresh="crud.refreshMetaData()">
</div>
<label class="field-validation-error control-label-error animate-show"
       ng-show="form.editPurchaseOrdersGeneralForm.vendorId.$error.required">
    @string.Format(Messages.isRequired, Labels.vendor)
</label>

我的问题是select控件不会将其所需的错误传播回main指令元素。因此,我看不到验证错误。

当我写这篇文章的时候,我想我可以在我的表单中或在指令内部添加一个ng-form来解决这个问题。我真的不喜欢添加太多的ng-forms,但没有其他解决方案。

你怎么看?

1 个答案:

答案 0 :(得分:0)

好吧,在我的表单中,我只是将div更改为ng-form,并且可以正常工作(原始表单加载除外-当我更改为某项然后更改为空选项时,它仅以红色显示,并带有错误)