javascript - 使用 Angularjs 选择 2 个下拉列表后调用一个函数

标签 javascript angularjs angular-ui-grid

我的 Html View :一旦用户选择了这两个选项,它应该在 Controller 中调用一个函数

<div class="col-lg-7">
        <ui-select on-select="onSelectedFetchDD($item)" ng-model="ctrl.GetPlatformRegionName.selected" theme="selectize" ng-disabled="ctrl.disabled" title="Choose a GetPlatformRegionName" append-to-body="true">
            <ui-select-match placeholder="-- Select --">{{$select.selected.dropDownText}}</ui-select-match>
            <ui-select-choices repeat="GetPlatformRegionName in ctrl.GetPlatformRegionNameList.value | filter: $select.search">
                  <span ng-bind-html="GetPlatformRegionName.dropDownText | highlight: $select.search"></span>
            </ui-select-choices>
        </ui-select>
    </div>

<div class="col-lg-7">
   <ui-select ng-model="ctrl.GetGsmName.selected" theme="selectize" ng-disabled="ctrl.disabled" title="Choose a GetGsmName" append-to-body="true">
       <ui-select-match placeholder="-- Select --">{{$select2.selected.dropDownText}}</ui-select-match>
       <ui-select-choices repeat="GetGsmName in ctrl.GetGSMNameList.value | filter: $select2.search">
            <span ng-bind-html="GetGsmName.dropDownText | highlight: $select2.search"></span>
              <small ng-bind-html="GetGsmName.dropDownValue | highlight: $select2.search"></small>
       </ui-select-choices>
   </ui-select>
</div>

我的 Controller 这是我 Controller 中的函数

$scope.fetchDD = function () {
    GSMList.then(function (result) {
        vm.GetGSMNameList = result.data;
    });

    PlatformMasterSchList.then(function (result) {
        vm.GetPlatformMasterSchNameList = result.data;
    });
};

最佳答案

我会向第二个 ui-select 添加一个函数,为 # selected 构建一个计数器,并调用一个函数来检查是否已达到数字:

HTML

(忽略 HTML 中的空格,因此在没有它的情况下不断删除它)

<ui-select ng-model="ctrl.GetGsmName.selected" theme="selectize" 
        ng-disabled="ctrl.disabled" title="Choose a GetGsmName" append-to-body="true"
        on-selected="onSelectedFetchOther()">

JS

var actOnSelectCount = 2;
var selectCount = 0;

$scope.onSelectedFetchOther = function() {
    selectCount++;
    doSomethingWhenNumSelected();
}

$scope.onSelectedFetchDD = function(item) {
    selectCount++;
    doSomethingWhenNumSelected();
}

function doSomethingWhenNumSelected = function() {
    if (selectCount === actOnSelectCount) {
        console.log("Doing something, 2 were selected!");
    }
}

稍微简单的JS

此方法将检查器函数中的增量处理为 DRY把代码拿出来一点:

var actOnSelectCount = 2;
var selectCount = 0;

$scope.onSelectedFetchOther = function() {
    incrementAndActIfReady();
}

$scope.onSelectedFetchDD = function(item) {
    incrementAndActIfReady();
}

function incrementAndActIfReady = function() {
    selectCount++;
    if (selectCount === actOnSelectCount) {
        console.log("Doing something, 2 were selected!");
    }
}

允许更改选择的修改版本

var actOnSelectCount = 2;
var selected = [];

$scope.onSelectedFetchOther = function() {
    incrementAndActIfReady('A');
}

$scope.onSelectedFetchDD = function(item) {
    incrementAndActIfReady('B');
}

function incrementAndActIfReady = function(selector) {

    // Push selection to selected if not
    // already there. else it was a change in same
    // select.
    if (selected.indexOf(selector) != -1) {
        selected.push(selector);
    }

    if (selection.length === actOnSelectCount) {
        console.log("Doing something, 2 were selected!");
    }
}

关于javascript - 使用 Angularjs 选择 2 个下拉列表后调用一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45563544/

相关文章:

javascript - 向滚动阻塞 'touchstart' 事件添加了非被动事件监听器

javascript - AngularJS:在将 resolve 与 Controller 一起使用时更正 minify-able 语法

node.js - 在其他路线之前提供 Assets

javascript - Mixitup Angular.js 指令(Angular.js watch 不起作用)

javascript - 在 UI 网格链接中调用范围函数

javascript - 如何将 jQuery 函数转换为 on() 方法

javascript - 每小时倒数计时器,但以 30 分钟标记

javascript - 对 Node 中的字母数字 li 进行排序

javascript - 对单元格值进行 Angular 网格验证

javascript - 如何在 angular-ui-grid 中为特定值的行着色?