0

当下拉列表的值发生变化时,我需要在控制器中绑定要调用的事件。此下拉列表是一个多选下拉列表 - 它位于指令中。

我已经能够使用可用的设置自定义下拉列表 - 但是,无法绑定事件。

这是代码HTML:

    <html>
    <head>
        <meta charset="utf-8">
        <title>AngularJS Dropdown Multiselect</title>
        <meta name="description" content="">
        <meta name="viewport" content="width=device-width">

        <script src="./angular.min.js"></script>
        <!--<script src="./ui-bootstrap-tpls.js"></script>-->
      <link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css">
      <script type="text/javascript" src="https://maxcdn.bootstrapcdn.com/bootstrap/3.0.0/js/bootstrap.min.js"></script>
      <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.7.0/lodash.min.js"></script>
        <script src="./app.js"></script>
        <style>
            .noscroll {
                overflow: hidden;
            }
        </style>

    </head>
    <body>
<div ng-app="myApp" ng-controller="AppCtrl">
    <div ng-dropdown-multiselect="" options="fruitdata"
         selected-model="fruitmodel" checkboxes="true"
         extra-settings="fruitsettings" events="extraEvents">
    </div>
    Selected Model: {{fruitmodel}} | json

</div>
    </body>
</html>

JS:

    'use strict';

var app = angular.module('myApp', ['angularjs-dropdown-multiselect']);

app.controller('AppCtrl', function ($scope) {
    $scope.fruitmodel = [];
    $scope.fruitsettings = {
        enableSearch: false
    };
    $scope.fruitdata = [{
        "label": "Apple",
            "id": 1
    }, {
        "label": "Banana",
            "id": 2
    }, {
        "label": "Orange",
            "id": 3
    }, {
        "label": "Pineapple",
            "id": 4
    }, {
        "label": "Strawberry",
            "id": 5
    }];
    $scope.example2settings = {
        displayProp: 'id'
    };

    $scope.extraEvents = {
        onItemDeselect: '$scope.onChange'
    };

    $scope.onChange = function() {
        console.log($scope.fruitdata);
    };
});

我需要检测模型的变化并据此采取行动。我尝试了两种方法 - 如下所示将 ng-change 添加到下拉列表中 - 但是,这不起作用。

<div ng-dropdown-multiselect="" options="fruitdata"
     selected-model="fruitmodel" checkboxes="true"
     extra-settings="fruitsettings" ng-change="onChange()">
</div>

该指令似乎确实允许扩展事件处理 - 但是,我想我没有做对。

4

2 回答 2

0

来自AngularJS下拉多选的快照

在此处输入图像描述

似乎你必须使用:

<div ng-dropdown-multiselect="" ... events="eventsCallback"></div>

并进入您的控制器:

$scope.eventsCallback = {
    onItemSelect:       function () { ... },
    onSelectionChanged: function () { ... }
}
于 2018-05-10T16:01:16.160 回答
0

$scope.fruitmodel 是您存储所选项目的位置吗?您可以使用 $scope.$watchCollection 对更改采取行动。

$scope.$watchCollection('fruitmodel', function(newValue, oldValue) {
    console.log(newValue, oldValue);
});
于 2018-05-10T15:52:29.717 回答