Jquery Angularjs:调用指令方法作为来自控制器的回调

Jquery Angularjs:调用指令方法作为来自控制器的回调,jquery,angularjs,Jquery,Angularjs,我有一个指令,它使用jquery“multiselect”插件来增强具有“filtermultiselect”属性的任何。我的问题是select是通过ajax调用填充的,我不希望指令在被填充之前运行。我修改了我的指令如下 angular.module('filtermultiselectDirective', []) .directive('filtermultiselect', function() { return { restrict: 'A

我有一个指令,它使用jquery“multiselect”插件来增强具有“filtermultiselect”属性的任何被填充之前运行。我修改了我的指令如下

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不是函数”


对新手有什么建议吗?

在无法验证代码的情况下,我认为您必须将元素包装在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                    
                });
            });
        }
    }
});

在无法验证代码的情况下,我认为您必须将元素包装到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                    
                });
            });
        }
    }
});

我有一个更简单的方法。 在选择选项中执行
ng repeat
时,只需添加此指令。 当您到达
ng repeat
中的最后一个元素时,我们的
元素将执行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                    
                    });

                   }
              }
    });

更新:它应该是
$(元素)。multiselect

我有一种更简单的方法。 在选择选项中执行
ng repeat
时,只需添加此指令。 当您到达
ng repeat
中的最后一个元素时,我们的
元素将执行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                    
                    });

                   }
              }
    });

更新:它应该是
$(元素)。multiselect

问题是由于将“元素”作为参数传递到函数中引起的。元素的值被范围的值覆盖。一个简单的修改,删除参数和一切工作

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

该问题是由于将“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                    
                    });
                });
            }
        }
    });

谢谢你的反馈,你为我指明了正确的方向。我已经在下面发布了实际的解决方案。感谢您的反馈,您为我指明了正确的方向。我已经在下面发布了实际的解决方案。感谢您的反馈。解决同一问题有很多方法。下面是对我有效的解决方案。干杯谢谢你的反馈。解决同一问题有很多方法。下面是对我有效的解决方案。干杯