Jquery Angularjs:调用指令方法作为来自控制器的回调 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”属性的任何。我的问题是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不是函数” 对新手有什么建议吗?在无法验证代码的情况下,我认为您必须将元素包装在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 }); }); } } }); 谢谢你的反馈,你为我指明了正确的方向。我已经在下面发布了实际的解决方案。感谢您的反馈,您为我指明了正确的方向。我已经在下面发布了实际的解决方案。感谢您的反馈。解决同一问题有很多方法。下面是对我有效的解决方案。干杯谢谢你的反馈。解决同一问题有很多方法。下面是对我有效的解决方案。干杯