【问题标题】:angularjs filter drop-down list according to selected values in other drop-down listsangularjs 根据其他下拉列表中的选定值过滤下拉列表
【发布时间】:2014-07-26 12:15:00
【问题描述】:

我想实现以下功能:

假设您有 1 个输入字段和 2 个下拉列表。在输入字段中,您可以填写您的电子邮件地址,然后您可以选择此电子邮件的类型(个人、专业、其他或无)。

现在在第三个下拉列表中,您将看到一个电子邮件列表,您可以从中选择,您喜欢的电子邮件地址。

那么应该发生什么:

1) 如果输入字段中没有任何内容,则首选电子邮件下拉列表为空(已经是这种情况)。

2) 当有一个电子邮件填写 AND 一个 TYPE 时,首选电子邮件下拉列表应该包含这个值:例如 test@test.com (Personal)

3) 当有e-mail 填写但没有TYPE 时,首选e-mail 下拉列表应该包含这个值:test@test.com 例如所以没有type .


HTML:

<div ng-repeat="email in contactInfo.emails">
    <input id="email" type="text" ng-model="email.email"/>
    <select id="emailType" ng-model="email.emailTypeId" ng-options="emailType.id as emailType.name for emailType in emailTypes">
        <option value="">Choose...</option>
    </select>
</div>

<br/><br/>

<label>Preferred e-mail:</label>
<select style="margin-left: 20px; width: 50%;" id="preferred-email" ng-model="contactInfo.preferredEmail" ng-options="email.email for email in (contactInfo.emails | filter:filterEmail) track by email.id">
    <option value="">Choose...</option>
</select>


JAVASCRIPT:

function MyCtrl($scope){
    $scope.contactInfo = {};
    $scope.emailTypes = [{"label":"Personal","id":1,"name":"Personal","rank":2},{"label":"Professional","id":2,"name":"Professional","rank":2},{"label":"Other","id":3,"name":"Other","rank":4}];

    $scope.contactInfo.emails = [{"id":1100, "emailTypeId":2,"email":"member@test.com"}, {"id":1200, "emailTypeId":1,"email":"member2@test.com"}];
    $scope.contactInfo.prefferedEmail = {};

    $scope.filterEmail = function(email){
        return (email.email);
    }
}


JSFIDDLE:

HERE 是小提琴,但只有第一个在工作。

我没有蚂蚁线索,所以如果有人可以帮助我,那就太好了。感谢您的宝贵时间。

斯文。

【问题讨论】:

标签: javascript angularjs drop-down-menu filter ng-options


【解决方案1】:

这是一个示例实现 - http://jsfiddle.net/iamgururaj/T7fkH/5/

代码:

<select style="margin-left: 20px; width: 50%;" id="preferred-email" ng-model="contactInfo.preferredEmail" ng-options="getEmail(email) for email in (contactInfo.emails | filter:filterEmail) track by email.id">
    <option value="">Choose...</option>
</select>

JS:

$scope.contactInfo = {
        emails: [{
            "id": 1100,
                "emailTypeId": "2",
                "email": "1@test.com"
        }, {
            "id": 1200,
                "emailTypeId": "1",
                "email": "2@test.com"
        }]
    };
    $scope.emailTypes = {
        "1": "Personal",
            "2": "Professional",
            "3": "Other"
    };
    $scope.filterEmail = function (email) {
        return (email.email);
    }

    $scope.getEmail = function (email) {
        if (email.emailTypeId) {
            return email.email + ' (' + $scope.emailTypes[email.emailTypeId] + ')';
        }
        return email.email;
    }

【讨论】:

  • 感谢您的回答,但这里的问题是,当您的电子邮件地址为空时,仍会显示该类型。应该没有任何价值。此外,当有电子邮件但没有类型时,您会看到带有空括号的电子邮件地址。应该检查输入字段是否为空。
  • 我猜你已经有一个过滤器了。在您的逻辑中包含相同的内容 - jsfiddle.net/iamgururaj/T7fkH/4
  • 啊是的很好,当没有选择类型时是否也可以没有括号,因为电子邮件地址后面显示空括号?谢谢。
  • 更新版本,如果为空则删除括号 - jsfiddle.net/iamgururaj/T7fkH/5
猜你喜欢
  • 1970-01-01
  • 2016-07-05
  • 1970-01-01
  • 1970-01-01
  • 2016-09-25
  • 2017-08-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多