我有一个使用jquery" multiselect"插件来增强任何<选择>属性为" filtermultiselect"。我的问题是select是通过ajax调用填充的,我不希望指令运行直到<选择>已经填充。我修改了我的指令如下
angular.module('filtermultiselectDirective', [])
.directive('filtermultiselect', function() {
return {
restrict: 'A',
link: function( $scope, element, attrs ) {
$scope.$on('createMultiSelectFilters', function (element) {
element.multiselect({
disableIfEmpty: true,
buttonWidth:'100%',
enableFiltering: true,
includeSelectAllOption: true,
enableCaseInsensitiveFiltering: true
});
});
}
}
});
从我的控制器我只需使用
$scope.$broadcast('createMultiSelectFilters');
作为回调。但是,没有工作,我得到" element.multiselect不是一个功能"。
对新手有什么建议吗?
答案 0 :(得分:0)
无法验证您的代码我认为您必须将您的元素包装在jQuery中。试试这个:
angular.module('filtermultiselectDirective', [])
.directive('filtermultiselect', function() {
return {
restrict: 'A',
link: function( $scope, element, attrs ) {
$scope.$on('createMultiSelectFilters', function (element) {
$(element).multiselect({
disableIfEmpty: true,
buttonWidth:'100%',
enableFiltering: true,
includeSelectAllOption: true,
enableCaseInsensitiveFiltering: true
});
});
}
}
});
答案 1 :(得分:0)
我有一种更简单的方法。
在select选项中执行ng-repeat
时,只需添加此指令即可。
当你到达ng-repeat
中的最后一个元素时,我们的element.multiselect
块将被执行。
angular.module('filtermultiselectDirective', [])
.directive('filtermultiselect', function() {
return function ($scope, element, attrs) {
if ($scope.$last) {
element.multiselect({
disableIfEmpty: true,
buttonWidth:'100%',
enableFiltering: true,
includeSelectAllOption: true,
enableCaseInsensitiveFiltering: true
});
}
}
});
更新:应为$(element).multiselect
答案 2 :(得分:0)
问题是将“element”作为参数传递给函数引起的。元素的值被范围的值覆盖。一个简单的修正,删除参数和一切工作。
angular.module('filtermultiselectDirective', [])
.directive('filtermultiselect', function() {
return {
restrict: 'A',
link: function( $scope, element, attrs ) {
$scope.$on('createMultiSelectFilters', function () {
element.multiselect({
disableIfEmpty: true,
buttonWidth:'100%',
enableFiltering: true,
includeSelectAllOption: true,
enableCaseInsensitiveFiltering: true
});
});
}
}
});