Угловая 1.7 обязательная выдача данных - PullRequest
1 голос
/ 20 мая 2019

Я пытаюсь узнать о механизме связывания в Angular 1.7, поэтому я привел простой пример.

В этом примере предполагается напечатать элемент h4 для каждого названия продукта.

JSON-файл моих продуктов (dummy.json)

{
    "ProductName": "Test Product 1",
    "QuantityPerUnit": "100"
}, {
    "ProductName": "Test Product 2",
    "QuantityPerUnit": "10"
}, {
    "ProductName": "Test Product 3",
    "QuantityPerUnit": "25"
}

В моем ProductController я хочу привязать мои JSON-данные к $scope.products

ProductController.js

angular.module("angularApp", [])
    .controller("ProductController", function ($scope) {

        $.getJSON("./dummy.json", function (json) {
            $scope.products = json;
        });

    });

В моем HTML я делаю следующие вещи, чтобы привязка работала:

  1. определить приложение ng-app="angularApp"

  2. определить контроллер в теге body ng-controller="ProductController"

  3. Я хочу просмотреть свои продукты через ng-repeat="product in products", и я использую нотацию привязки данных Angular говорит, что я должен использовать {{ }}

index.html

<!DOCTYPE HTML>
<html ng-app="angularApp" lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">

        <!-- jQuery first, then Popper.js, then Bootstrap JS -->
        <script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
        <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>

        <!-- Angular 1.7.8 -->
        <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.7.8/angular.min.js"></script>
        <script src="./js/ProductController.js"></script>

        <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
        <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.8.2/css/all.css" integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay" crossorigin="anonymous">
        <link rel="stylesheet" href="./css/style.css">
    </head>

    <body ng-controller="ProductController">
        <div class="container">
            <div class="list-group">
                <h4 ng-repeat="product in products">{{ product.ProductName }}</h4>
            </div>
        </div>
    </body>

</html>

Консоль не показывает никаких ошибок, и когда я проверяю свои инструменты разработчика (AngularJS Batarang), я замечаю, что на моем теге body мой products существует.

Что я забыл или делаю неправильно? Любое указание в правильном направлении приветствуется.

Заранее спасибо

1 Ответ

4 голосов
/ 20 мая 2019

Первая проблема - это файл JSON: это не массив.

Должно быть так:

[{
    "ProductName": "Test Product 1",
    "QuantityPerUnit": "100"
 }, {
    "ProductName": "Test Product 2",
    "QuantityPerUnit": "10"
 }, {
    "ProductName": "Test Product 3",
    "QuantityPerUnit": "25"
 }]

И, как в комментариях, не уверен, почему вы используете $ getJson, но это должно работать:

angular.module("angularApp", [])
    .controller("ProductController", function ($scope,$http) {   
        $http.get("dummy.json").then(function(response) {
          console.log("Json",response.data);
          $scope.products = response.data;
        });
});

СAngular JS http вы должны быть в состоянии получить данные, но вы должны ввести $ http.

Здесь вы также можете найти Plunker

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...