I enabled jQuery MixItUp using AngularJS NgRoute using a custom directive.
I use the AngularJS $broadcast and $on functions to handle the communication between the controller and the directive:
myApp .directive('mixitup', function($compile) { return { restrict: 'A', link: function(scope, element, attrs) { scope.$on('init-mixitup', function(event) { // console.log('[event] รฎnit-mixitup'); angular.element(element).mixItUp({ animation: { duration: 200 }, load: { sort: 'myorder:desc' } }); }); scope.$on('resort-mixitup', function(event, sortCommand) { // console.log('[event] resort-mixitup'); angular.element(element).mixItUp('sort', sortCommand); }); scope.$on('destroy-mixitup', function(event) { // console.log('[event] destroy-mixitup'); angular.element(element).mixItUp('destroy'); }) } }; });
My HTML view:
<div class="btn-group controls"> <button class="btn btn-lg filter" data-filter="all">All</button> <button class="btn btn-lg filter" data-filter=".photo">Photo</button> <button class="btn btn-lg filter" data-filter=".audio">Audio</button> <button class="btn btn-lg filter" data-filter=".video">Video</button> </div> <div mixItUp="mixItUp" id="mixitup-container"> <div ng-repeat="item in items" id="{{ item.id }}" style="display: inline-block;" data-myorder="{{ item.date }}" class="mix col-xs-6 col-sm-4 {{ item.category }}"> <img ng-src="{{ item.image }}" class="img-responsive img-circle"> </div> </div>
In my controller, the jQuery MixItUp handler with the following calls:
// instantiate jQuery MixItUp $rootScope.$broadcast('init-mixitup'); // sort jQuery MixItUp $rootScope.$broadcast('resort-mixitup', 'myorder:desc');
You need to destroy jQuery MixItUp when you exit the page. I did this by adding the following to my controller:
$scope.$on("$destroy", function(){ $rootScope.$broadcast('destroy-mixitup'); });
You can also take a look at a very similar question that I posted myself: jQuery MixItUp with AngularJS NgRoute
source share