是否有任何Angular JS Tabs指令可对其进行重新排序(例如浏览器的选项卡)
如果不是开始实施,那将是很好的
使用angular-ui-bootstap
<tabset>
<tab ng-repeat="tab in vm.tabs" active="tab.active" sortable-tab> </tab>
<tab disabled="true" ng-click"vm.addNewTab()" class="nonSortable-addTab-plusButton"></tab>
</tabset>
如何使它们可重新排序?
编辑:增加了赏金以使用上面的原始tabset语法。
使用Angular UI Bootstrap tabset
,只需一个sortable-tab
指令:
<tabset>
<tab sortable-tab ng-repeat="tab in tabs" heading="{{tab.title}}" active="tab.active" disabled="tab.disabled">
<p>{{tab.content}}</p>
</tab>
<tab disabled="true">
<tab-heading>
<i class="glyphicon glyphicon-plus"></i>
</tab-heading>
</tab>
</tabset>
首先,它需要一点技巧/技巧才能与集成ngRepeat
,因此可以重新排序阵列。它(重新)解析ng- repeat
属性,并取出由范围阵列,就像ngRepeat
不
// Attempt to integrate with ngRepeat
// https://github.com/angular/angular.js/blob/master/src/ng/directive/ngRepeat.js#L211
var match = attrs.ngRepeat.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?\s*$/);
var tabs;
scope.$watch(match[2], function(newTabs) {
tabs = newTabs;
});
然后,您还可以$index
在作用域上监视变量,以确保始终拥有当前元素的最新索引:
var index = scope.$index;
scope.$watch('$index', function(newIndex) {
index = newIndex;
});
然后使用HTML5拖放,通过使所述元素的索引作为其数据setData
和getData
attrs.$set('draggable', true);
// Wrapped in $apply so Angular reacts to changes
var wrappedListeners = {
// On item being dragged
dragstart: function(e) {
e.dataTransfer.effectAllowed = 'move';
e.dataTransfer.dropEffect = 'move';
e.dataTransfer.setData('application/json', index);
element.addClass('dragging');
},
dragend: function(e) {
e.stopPropagation();
element.removeClass('dragging');
},
dragleave: function(e) {
element.removeClass('hover');
},
drop: function(e) {
e.preventDefault();
e.stopPropagation();
var sourceIndex = e.dataTransfer.getData('application/json');
move(sourceIndex, index);
element.removeClass('hover');
}
};
// For performance purposes, do not
// call $apply for these
var unwrappedListeners = {
dragover: function(e) {
e.preventDefault();
element.addClass('hover');
},
/* Use .hover instead of :hover. :hover doesn't play well with
moving DOM from under mouse when hovered */
mouseenter: function() {
element.addClass('hover');
},
mouseleave: function() {
element.removeClass('hover');
}
};
angular.forEach(wrappedListeners, function(listener, event) {
element.on(event, wrap(listener));
});
angular.forEach(unwrappedListeners, function(listener, event) {
element.on(event, listener);
});
function wrap(fn) {
return function(e) {
scope.$apply(function() {
fn(e);
});
};
}
注意:关于使用hover
类,:hover
有些技巧,而不是某些悬停效果。这部分是由于CSS
:hover
样式没有从鼠标下方重新排列后,至少在Chrome中未在元素上删除。
实际移动选项卡,获取使用的数组ngRepeat
并对其重新排序的函数:
function move(fromIndex, toIndex) {
// http://stackoverflow.com/a/7180095/1319998
tabs.splice(toIndex, 0, tabs.splice(fromIndex, 1)[0]);
};
您可以在Plunker中看到所有这些
可序列化标签的工作方式与普通标签完全相同,只是它们也可以序列化为XML。 仅当您以编程方式编辑标签的内容并希望将其序列化为XML时,才应使用它们。 新建 { "type": "example_serializable_label", "message0": "%1", "args0": [ { "type": "field_label_serializable",
jQueryUI提供了sortable()方法,可以使用鼠标对列表或网格中的元素进行重新排序。 此方法基于作为第一个参数传递的操作字符串执行可排序性操作。 语法 (Syntax) sortable ()方法可以使用两种形式 - $(selector,context).sortable(options)方法 $(selector, context).sortable ("action", [para
我在使用角度异步管道时遇到了一个问题。基于从后端接收的内容,使用ngFor的模板中显示的内容的顺序不同。 代码如下: 我已经创建了一个组件称为头组件,它收到一个可观察的头$作为输入参数。 在导入标头组件的父组件内部
我在整个网站上寻找解决方案,但是没有找到任何东西。我面临一个问题,我需要重做拖拽的风格。我正在为可拖动/可排序部分使用jquery ui。但是,我需要创建一个新的行为:即,我单击处理程序,释放左按钮,使用mousemove,元素将粘在光标上,再次单击,元素将掉落。总的来说,我需要在拖动过程中禁用mousedown部分。 编辑: 好的,这里是一个简单的可排序示例。我需要的是,当我点击手柄时。文章标题
问题内容: 如何使html 始终可见,而不仅仅是关注? 似乎 应该 像这样简单: 的HTML: CSS: 无论我做什么,似乎我根本都无法影响某个区域的样式,它看起来确实不受CSS影响。有任何想法吗?另外,还有其他无法使用样式标记的示例吗? 问题答案: jQuery插件MapHilight: 您可能会在这里发现jQuery插件MapHilight)。 HTML / CSS替代 我建议使用带有绝对链接
我试图将jQuery可拖动、可拖放和可排序相结合;然而,我一直有问题。有人能帮帮我吗? A、 B、C、D、E瓷砖可在上部可放下和可分拣之间移动 此外,我正试图在必要时在任何位置停用和重新激活所有这些。 这是我的,但它很有缺陷,也不漂亮: JS 超文本标记语言