2017-06-16 82 views
1

我是AngularJs世界的新手,並試圖在組件中使用angularjs-dropdown-multiselect。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-下拉-多選:1.11.8

Plunkerhttp://plnkr.co/edit/JL7N6M?p=preview

謝謝你幫助我。

回答

0

我已經創建了一個實例變量並將其初始化爲Controller實例。

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(); 
     } 
    }; 

我並不完全滿意,這是應該有更好的方式做同樣的,但直到我發現,我會保持這個。

Updated Plunker:http://plnkr.co/edit/D7BKI9?p=preview