javascript - Angular 1 ng-如果不显示div

标签 javascript html angularjs angular-ng-if

我一直在编写一个代码,如果数组为空([]),则使用 ng-if 显示带有消息的 div。即使我有 console.log 数组并且它显示为空,ng-if 也不显示 div。

我对 angularjs 还很陌生,所以我不确定我是否正确使用了 ng-if 指令。这是我的代码,有什么帮助,谢谢!

js:

(function () {
    'use strict';

    var data = [];
    var shoppingList = [
        {
            name: "Donuts",
            quantity: "10"
        },
        {
            name: "Cookies",
            quantity: "10"
        },
        {
            name: "Drinks",
            quantity: "10"
        },
        {
            name: "Shrimp",
            quantity: "10"
        },
        {
            name: "Ice Cream tub",
            quantity: "100"
        }
    ];
    console.log(data);
    angular.module('shoppingListCheckOffApp', [])
        .controller('toBuyListController', toBuyListController)
        .controller('boughtListController', boughtListController)
        .service('shoppingListService', shoppingListService);

    toBuyListController.$inject = ['shoppingListService'];
    function toBuyListController(shoppingListService) {
        var buy = this;
        buy.shoppingList = shoppingList;
        buy.shoppingListBought = function (itemIndex) {
            shoppingListService.dataTransfer(buy.shoppingList[itemIndex].name, buy.shoppingList[itemIndex].quantity);
            shoppingListService.remove(itemIndex);
        };
    }
    boughtListController.inject = ['shoppingListService'];
    function boughtListController(shoppingListService) {
        var bought = this;
        bought.data = shoppingListService.getData();
        console.log(bought.data);
    }

    function shoppingListService() {
        var service = this;
        service.dataTransfer = function (itemName, quantity) {
            var item = {
                name: itemName,
                quantity: quantity
            };
            data.push(item);
        }
        service.remove = function (itemIndex) {
            shoppingList.splice(itemIndex, 1);
        };
        service.getData = function () {
            return data;
        };

    };
})();

html:

<!doctype html>
<html ng-app="shoppingListCheckOffApp">

<head>
    <title>Shopping List Check Off</title>
    <meta charset="utf-8">
    <script src="angular.min.js"></script>
    <script src="app.js"></script>
</head>

<body>
    <div>
        <h1>Shopping List Check Off</h1>

        <div>

            <!-- To Buy List -->
            <div ng-controller="toBuyListController as buy">
                <h2>To Buy:</h2>
                <ul>
                    <li ng-repeat="item in buy.shoppingList">Buy {{item.quantity}} {{item.name}}(s)<button
                            ng-click="buy.shoppingListBought($index);" ng-click="myVar = true"><span></span>
                            Bought</button></li>
                </ul>
                <div ng-if="buy.shoppingList === []">Everything is bought!</div>
            </div>

            <!-- Already Bought List -->
            <div ng-controller="boughtListController as bought">
                <h2>Already Bought:</h2>
                <ul>
                    <li ng-repeat="item in bought.data">Bought {{item.quantity}} {{item.name}}(s)</li>
                </ul>
                <div ng-if="bought.data === []">Nothing bought yet.</div>
            </div>
        </div>
    </div>

</body>

</html>

最佳答案

您应该以这种方式使用 ng-if (对于数组):

<div ng-if="!bought.data.length">Nothing bought yet.</div>

当列表为空时,这将显示消息。

如果你这样做:

buy.shoppingList === []

您正在将 buy.shoppingList 数组与新的空数组进行比较,然后它将返回 false。

关于javascript - Angular 1 ng-如果不显示div,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45528465/

相关文章:

javascript - js中的鼠标悬停引发未定义的错误

JavaScript:2 个 window.opener.location.href 语句与 alert() 之间无法正常工作

angularjs - $httpBackend.whenGET 多参数

android - ng-include 在 PhoneGap 中不起作用

jquery - Angular 日期范围选择器中的奇怪行为

javascript - 如何修复 TypeScript 0.9 中的 TS2081 && TS2087 错误

javascript - jquery 缓冲区/队列的效果?或者判断效果是否正在进行中?

javascript - jQuery UI DatePicker - 出发日期和返回日期

html - 带有白色文本的不透明背景

javascript - 在 Canvas 内绘制的弹跳球,javascript