无法从 ng-dropdown-multiselect 指令调用控制器功能

Unable to invoke controller function from ng-dropdown-multiselect directive

我需要在我的控制器中绑定一个事件,以便在下拉列表的值发生变化时调用。这个下拉菜单是一个多 select 下拉菜单 - 在一个指令中。

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

这是代码 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>

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

$scope.fruitmodel 是您存储所选项目的地方吗?您可以使用 $scope.$watchCollection 来处理更改。

$scope.$watchCollection('fruitmodel', function(newValue, oldValue) {
    console.log(newValue, oldValue);
});

快照来自 AngularJS 下拉多选

看来你必须使用:

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

并进入您的控制器:

$scope.eventsCallback = {
    onItemSelect:       function () { ... },
    onSelectionChanged: function () { ... }
}