AngularJs Component и angularjs-dropdown-множественный выбор

Я новичок в мире AngularJs и пытался использовать angularjs-dropdown-multiselect внутри компонента.

HTML-код компонента выглядит так:

<div>
  <select id="statusSelection" class="form-control"
          ng-options="status.name for status in $ctrl.statuses track by status.id"
          ng-model="$ctrl.status" ng-change="$ctrl.filterChanged()"></select>
</div>
<div ng-dropdown-multiselect="" options="$ctrl.categories" selected-model="$ctrl.category"
     events="$ctrl.events">
</div>

Событие в статусе изменено, и категория будет вызывать то же действие.

MultiselectController.prototype.filterChanged = function() {
        this.onFilterChange({
          status: this.status,
          category: this.category});
    };
MultiselectController.prototype.events = {
        onItemSelect: function(item) {
            filterChanged();
        },
        onItemDeselect: function(item) {
            filterChanged();
        }
    };

Когда я пытаюсь запустить приведенный выше код и изменить статус, код работает, как ожидалось, но дает сбой во время изменения категории (ошибка в консоли).

Сообщение об ошибке: ReferenceError: filterChanged не определен

Угловая версия: 1.5.8

angularjs-dropdown-multiselect: 1.11.8

Плункер: http://plnkr.co/edit/JL7N6M?p=preview

Спасибо за помощь мне здесь.

1 ответ

Решение

Я создал переменную экземпляра и инициализировал ее для экземпляра контроллера.

var _instance;
function MultiselectController($scope) {
    this.statuses = testMultiselect.statuses;
    this.categories = testMultiselect.categories;
    this.$scope = $scope;
    this.setDefault();
    _instance = this;
}

Теперь я использую эту переменную экземпляра для доступа к функциям контроллера.

MultiselectController.prototype.events = {
        onItemSelect: function(item) {
            _instance.filterChanged();
        },
        onItemDeselect: function(item) {
            _instance.filterChanged();
        }
    };

Я не совсем доволен этим, так как должен быть лучший способ сделать то же самое, но пока я не найду, я сохраню это.

Обновленный Plunker: http://plnkr.co/edit/D7BKI9?p=preview

Другие вопросы по тегам