更新ng-repeat范围可删除不在ng-repeat中的意外项目

时间:2014-12-08 23:53:36

标签: jquery angularjs rubaxa-sortable

为什么我的可排序角度ng-repeat菜单会在排序后的菜单项之后删除所有内容? https://github.com/RubaXa/Sortable/tree/dev 我正在使用RubaXa的带有角度的Sortable库来为自定义CMS创建一个可排序的菜单系统。当菜单被排序时,我有一个代码循环遍历所有菜单项,记录它们的位置并更新$ scope.menus。

            var menus = {};
            jQuery('.mb-draggable').has('a[href!="#"]').each(function(i, menuItem) {
                var location = jQuery(menuItem).parent('[data-menu]').data('menu');
                var position = jQuery('[data-menu="' + location + '"]').children('.mb-draggable').has('a[href!="#"]').index(jQuery(menuItem));  
                var id = jQuery(menuItem).data('id');

                //findMenuById finds the index and data of the menu item that has a matching id
                var found = theme.findMenuById($scope.menus, id);
                var newData = found.data;
                newData.location = location;
                newData.position = position;
                if(!menus[location]) {
                    menus[location] = [];
                }
                menus[location][position] = newData;
            });
            $scope.menus = menus;
            console.log('$scope.menus', $scope.menus);
            $scope.$apply();

$ scope.menus有两个不同的属性.main和.footer,每个属性都包含一系列菜单列表项。当我创建$ scope.menus =菜单时,$ scope.menus是正确的但视图突然摆脱了页脚菜单和编辑按钮,这些按钮不在ng-repeat内。 这是菜单的玉。

#navbar.navbar-collapse.collapse
        ul#sortable-head.nav.navbar-nav(data-menu="main")
            li(ng-repeat="menu in menus.main" class="mb-draggable {{menu.classes}}" ng-class="active(menu.url)" data-id="{{menu.id}}")
                a(href="{{menu.url ? menu.url : /}}" target="{{menu.target}}").mb-editable.mb-main-list-a {{menu.title}}
            li.drop-down
                a(data-toggle="dropdown" href="#").dropdown-toggle 
                    | Blog
                    span.caret
                ul#sortable-footer.dropdown-menu(role="menu" data-menu="footer")
                    li(ng-repeat="menu in menus.footer" data-id="{{menu.id}}").mb-draggable
                        a(href="{{menu.url ? menu.url: /}}" target="{{menu.target}}").mb-editable.mb-footer-list-a {{menu.title}}

使用jQuery添加编辑按钮

jQuery('[data-menu]').append($compile('<li data-toggle="modal" data-target="#editMenuItemModal" ng-click="selectedMenu($event)" class="mb-edit-menu-item"><a href="#"> <i class="fa fa-pencil fa-lg"></i></a></li>')($scope));

1 个答案:

答案 0 :(得分:0)

使用ng-sortable.js

文档:https://github.com/RubaXa/Sortable/tree/dev#support-angularjs

P.S。如果问题不明确,请在jsbin.com上创建一个示例,我会尽力帮助您。