2017-06-16 147 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