将 jQuery MixItUp 集成到 angular.js 项目中
Integrating jQuery MixItUp in an angular.js project
我正在尝试将 jQuery MixItUp 集成到 angular.js 项目中。为此,我使用了以下自定义指令。
app.directive('mixitup', function($compile) {
return {
restrict: 'A',
scope: {
entities: '='
},
link: function(scope, element, attrs) {
scope.$watchCollection('entities', function() {
angular.element(element).mixItUp({
animation: {
duration: 200
},
load: {
sort: 'date:desc'
},
debug: {
enable: true,
mode: 'verbose'
}
});
}, true);
}
};
});
该指令在 HTML 中的使用如下。
<div mixitup="mixitup" id="mixitup-container" entities="medias">
<div ng-repeat="media in medias"
data-date="{{ media.date }}"
class="{{ itemClass }} {{ media.category }}">
<div class="image">
<img ng-src="{{ media.cover_image }}" class="img-responsive"></div>
</div>
</div>
通过从自定义服务中获取 JSON 数据以将 angular 应用程序连接到 Laravel 5.1 应用程序,在控制器中填充 medias
集合。成功回调调用以下函数。在指令中记录集合时,它看起来不错。
$scope.addMedias = function addMedias(data) {
for (var i=0; i<data.length; i++) {
$scope.medias.push(data[i]);
}
$scope.loading = false;
};
内容正常加载,但 MixItUp-Tiles 保持隐藏 display: none
。向视图添加过滤器时,磁贴在过滤时显示,但在启动时不显示。
我还尝试从 CSS 中的 Twitter Bootstrap 3 中删除花车,因为 MixItUp 使用的是 display: inline-block
.
#mixitup-container .mix {
display: none;
float: none;
}
MixItUp 调试脚本也没有显示任何错误。但是 #mixitup-container
得到 class fail
附加。
我设法将 jQuery MixItUp 集成到我的 AngularJs 应用程序中。
自定义指令现在如下所示:
myApp
.directive('mixitup', function($compile) {
return {
restrict: 'A',
scope: {
datasource: '=',
add: '&',
},
link: function(scope, element, attrs) {
scope.$on('init-mixitup', function(event) {
console.log('init');
angular.element(element).mixItUp({
animation: {
duration: 200
},
load: {
sort: 'myorder:desc'
}
});
});
scope.$on('resort-mixitup', function(event, sortCommand) {
angular.element(element).mixItUp('sort', sortCommand);
});
}
};
});
我使用 angular 广播功能在所有数据加载后初始化 MixItUp。这是通过触发以下内容来完成的:
// init
$rootScope.$broadcast('init-mixitup');
// sort
$rootScope.$broadcast('resort-mixitup', 'myorder:desc');
视图 HTML 如下所示:
<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>
我还在我的 less 中包含了首选 css 规则:
#mixitup-container {
.mix {
display: none;
}
}
还有一个小问题。当我第一次访问带有 MixItUp 的页面时,一切正常,但第二次时,过滤器和排序不再起作用。我正在使用 angular $routeProvider
来管理路由。这里还有一个与此问题相关的问题:How to initiate MixItUp with AngularJS NgRoute
我正在尝试将 jQuery MixItUp 集成到 angular.js 项目中。为此,我使用了以下自定义指令。
app.directive('mixitup', function($compile) {
return {
restrict: 'A',
scope: {
entities: '='
},
link: function(scope, element, attrs) {
scope.$watchCollection('entities', function() {
angular.element(element).mixItUp({
animation: {
duration: 200
},
load: {
sort: 'date:desc'
},
debug: {
enable: true,
mode: 'verbose'
}
});
}, true);
}
};
});
该指令在 HTML 中的使用如下。
<div mixitup="mixitup" id="mixitup-container" entities="medias">
<div ng-repeat="media in medias"
data-date="{{ media.date }}"
class="{{ itemClass }} {{ media.category }}">
<div class="image">
<img ng-src="{{ media.cover_image }}" class="img-responsive"></div>
</div>
</div>
通过从自定义服务中获取 JSON 数据以将 angular 应用程序连接到 Laravel 5.1 应用程序,在控制器中填充 medias
集合。成功回调调用以下函数。在指令中记录集合时,它看起来不错。
$scope.addMedias = function addMedias(data) {
for (var i=0; i<data.length; i++) {
$scope.medias.push(data[i]);
}
$scope.loading = false;
};
内容正常加载,但 MixItUp-Tiles 保持隐藏 display: none
。向视图添加过滤器时,磁贴在过滤时显示,但在启动时不显示。
我还尝试从 CSS 中的 Twitter Bootstrap 3 中删除花车,因为 MixItUp 使用的是 display: inline-block
.
#mixitup-container .mix {
display: none;
float: none;
}
MixItUp 调试脚本也没有显示任何错误。但是 #mixitup-container
得到 class fail
附加。
我设法将 jQuery MixItUp 集成到我的 AngularJs 应用程序中。
自定义指令现在如下所示:
myApp
.directive('mixitup', function($compile) {
return {
restrict: 'A',
scope: {
datasource: '=',
add: '&',
},
link: function(scope, element, attrs) {
scope.$on('init-mixitup', function(event) {
console.log('init');
angular.element(element).mixItUp({
animation: {
duration: 200
},
load: {
sort: 'myorder:desc'
}
});
});
scope.$on('resort-mixitup', function(event, sortCommand) {
angular.element(element).mixItUp('sort', sortCommand);
});
}
};
});
我使用 angular 广播功能在所有数据加载后初始化 MixItUp。这是通过触发以下内容来完成的:
// init
$rootScope.$broadcast('init-mixitup');
// sort
$rootScope.$broadcast('resort-mixitup', 'myorder:desc');
视图 HTML 如下所示:
<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>
我还在我的 less 中包含了首选 css 规则:
#mixitup-container {
.mix {
display: none;
}
}
还有一个小问题。当我第一次访问带有 MixItUp 的页面时,一切正常,但第二次时,过滤器和排序不再起作用。我正在使用 angular $routeProvider
来管理路由。这里还有一个与此问题相关的问题:How to initiate MixItUp with AngularJS NgRoute