【问题标题】:How to set the required field for md-autocomplete dynamically如何动态设置 md-autocomplete 的必填字段
【发布时间】:2017-08-30 18:44:46
【问题描述】:

尝试在自定义目录中使用md-autocomplete

我希望根据两个条件要求该字段。一个是初始化的(cond1),一个是变化的(cond2)

我试过这样做: required="{{ cond1 && !cond2 }}"

但由于某种原因,md-autocomplete 总是成为必需的,即使 cond1 最初是 undefinedfalse。它也不会响应对 cond2 值所做的更改。

验证器也不检查所选项目是否已设置。它只是检查字段中是否有文本。

ng-required 似乎什么也没做。

有什么想法可以让我完成这项工作吗?

编辑:

这是我的指令的 .html

<div ng-form="dummyForm">
    <md-autocomplete
            md-input-name="{{ctrl.fieldName}}"
            md-selected-item="ctrl.dummyItem"
            md-selected-item-change="ctrl.setSelectedItem()"
            md-search-text="ctrl.searchText"
            md-items="item in ctrl.querySearch(ctrl.searchText)"
            md-item-text="item.display || item"
            md-min-length="0"
            placeholder="{{ ctrl.placeholder }}"
            ng-disabled="ctrl.selectAll || ctrl.isDisabled"
            required="{{ ctrl.isRequired && !ctrl.selectAll }}">
        <md-item-template>
            <span>{{ item.display || item }}</span>
        </md-item-template>
        <md-not-found>
            No results.
        </md-not-found>
    </md-autocomplete>
</div>
<div class="label-wrapper">
    <label
            class="checkbox-label"
            ng-if="ctrl.selectAll !== null">
        <input
                type="checkbox"
                ng-model="ctrl.selectAll"
                ng-change="ctrl.checkSelectAll()">
        {{ ctrl.checkboxName ? ctrl.checkboxName : 'Select all' }}
    </label>
</div>

它基本上只是一个自定义输入字段,允许用户从列表中选择一个值或单击复选框以“全选”项目。当复选框被选中时,我不想再需要 md-autocomplete 字段了。

【问题讨论】:

    标签: javascript html angularjs autocomplete angular-material


    【解决方案1】:

    正如您在demo plnkr 中看到的那样,它与ng-required 一起工作正常。

    查看

    <form name="myForm">
        <md-autocomplete 
            md-autoselect=true
            placeholder="What is your favorite place?"
            md-item-text="item.display"
            md-items="item in ctrl.items"
            md-menu-class="autocomplete-custom-template"
            md-min-length="2"
            md-delay="ctrl.throttle"
            md-search-text="ctrl.searchText"
            md-search-text-change="ctrl.searchTextChange(ctrl.searchText)"
            md-select-on-match=true
            md-match-case-insensitive=true
            md-selected-item-change="ctrl.selectedItemChange(item)"
            ng-required="ctrl.cond1 && !ctrl.cond2"
            md-selected-item="ctrl.selectedItem">
    
       {{ myForm.$error }}
    
       <div>
           <md-button type="submit">Submit</md-button>
       </div>
    </form>
    

    AngularJS 控制器

    myApp.controller('MyCtrl', function ($scope) {
        var vm = this;
        this.cond1 = true;
        this.cond2 = false;
    });
    

    【讨论】:

    • 对我不起作用。我在自定义指令中使用我的 md-autocomplete。我将它包装在一个 ng-form div 中,以便父表单应用它的验证。但我似乎无法正确设置所需的属性。
    • @mTv 这个信息很重要。请将您的自定义指令添加到您的问题中。
    • 已编辑评论。
    • @mTv ng-required="ctrl.isRequired &amp;&amp; !ctrl.selectAll" 应该适合你。
    • 是的,确实如此:/必须从之前删除一些修补程序代码,然后才能使其工作:D 谢谢!
    猜你喜欢
    • 1970-01-01
    • 2017-03-29
    • 1970-01-01
    • 2018-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-24
    相关资源
    最近更新 更多