AngularJS - 使用 angularjs 拖放列表库时在 html 页面中没有得到任何东西

Posted

技术标签:

【中文标题】AngularJS - 使用 angularjs 拖放列表库时在 html 页面中没有得到任何东西【英文标题】:AngularJS - Not getting anything in html page while using angularjs drag and drop list library 【发布时间】:2020-06-10 07:02:19 【问题描述】:

我想在我的项目中实现拖放功能。为此,我使用angular-drag-and-drop-lists,这是该功能的demo。我没有得到任何 html 页面。我试图在没有相关 CSS 的情况下打开列表,但效果很好(注释了那段代码)。

谁能为这个问题提供解决方案,为什么我没有在 html 上得到任何东西而在控制台上没有任何错误。

HTML:

<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.7.8/angular.min.js"></script>

        <script src="./script.js"></script>
        <script src="./angular-drag-and-drop-lists.js"></script>
        <title>Document</title>
        <link rel="stylesheet" href="./style.css">
    </head>
    <body ng-app="demo">
        <div ng-controller="SimpleDemoController" class="simpleDemo">
            <ul dnd-list="list">
                <li ng-repeat="item in list" dnd-draggable="item"
                    dnd-moved="list.splice($index, 1)"
                    dnd-effect-allowed="move"
                    dnd-selected="models.selected = item"
                    ng-class="'selected': models.selected === item">
                    item.label
                </li>
            </ul>
            <!-- <ul ng-repeat="item in models.lists.A">
                <li>item.label</li>
            </ul> -->


        </div>
    </body>
</html>

Javascript

var demo = angular.module('demo', []);

var SimpleDemoController = function($scope) 

    $scope.models = 
        selected: null,
        lists: "A": [], "B": []
    ;
    console.log($scope.models.lists.A, $scope.models.lists.B);
    // Generate initial model
    for (var i = 1; i <= 3; ++i) 
        $scope.models.lists.A.push(label: "Item A" + i);
        $scope.models.lists.B.push(label: "Item B" + i);
    

    // Model to JSON for demo purpose
    $scope.$watch('models', function(model) 
        $scope.modelAsJson = angular.toJson(model, true);
    , true);

;

demo.controller('SimpleDemoController', SimpleDemoController);

css

.simpleDemo ul[dnd-list] 
    min-height: 42px;
    padding-left: 0px;

.simpleDemo ul[dnd-list] .dndDraggingSource 
    display: none;

.simpleDemo ul[dnd-list] .dndPlaceholder 
    background-color: #ddd;
    display: block;
    min-height: 42px;


.simpleDemo ul[dnd-list] li 
    background-color: #fff;
    border: 1px solid #ddd;
    border-top-right-radius: 4px;
    border-top-left-radius: 4px;
    display: block;
    padding: 10px 15px;
    margin-bottom: -1px;

.simpleDemo ul[dnd-list] li.selected 
    background-color: #dff0d8;
    color: #3c763d;

【问题讨论】:

您正在使用dnd-list="list",但您从未定义过list - 它可能被视为一个空数组。对于您正在使用的列表项ng-repeat="item in list",所以没有什么可以迭代的。这就是为什么您的视图中没有显示任何内容的原因。我猜您应该将所有出现的list 替换为models.lists.A,但很难准确说出您在做什么。您是否只是想使用dnd-list 来重新排列单个列表而不是在列表之间拖放? 关注这个实现embed.plnkr.co/plunk/NwleL2 【参考方案1】:

您需要在演示变量(角度模块)中添加“dndLists”

var demo = angular.module('demo', ["dndLists"]);

【讨论】:

以上是关于AngularJS - 使用 angularjs 拖放列表库时在 html 页面中没有得到任何东西的主要内容,如果未能解决你的问题,请参考以下文章

AngularJS 工具方法以及AngularJS中使用jQuery

[AngularJS] AngularJS系列 基础篇

AngularJS + JQuery:如何在 angularjs 中获取动态内容

AngularJS进阶(三十三)书海拾贝之简介AngularJS中使用factory和service的方法

angularjs插件怎么使用

如何查看angularjs版本