javascript - 将数组写入 $scope (Javascript)

标签 javascript jquery angularjs

我正在修改 Altair Material Design 模板 ( http://themeforest.net/item/altair-admin-material-design-premium-template/12190654 ) 并拥有以下 Angular JS Controller 。

我成功调用 API 并在 for 循环中创建变量。然后我想将它们写入 $scope.dragulaItems。这在控制台日志中似乎工作正常,但是该数组在页面上无法正确显示。

html div如下:

            <div class="uk-grid uk-grid-width-small-1-2 uk-grid-width-medium-1-3 uk-grid-width-large-1-5" data-uk-grid-margin dragula='"first-dragula"' dragula-model='dragulaItems'>
            <div ng-repeat="item in dragulaItems">

我在页面响应中看到了正确的返回数(20 个样式的 div),但其中没有内容。

angular
.module('altairApp',[angularDragula(angular)])
.controller('addResultsCtrl', [
    '$scope',
    '$rootScope',
    'utils',

    function ($scope,$rootScope,utils) {

        // Search

        SessionKey = "YXZmLwmNiT3vTuXwbbQrSY8ibrGhLuWLZag3DCCH2zu7w9dO3b";

        $("#addSearch").submit(function(event) {
            event.preventDefault();
            var searchTerm = $("#addSearch-term").val();
            var settings = {
              "async": true,
              "crossDomain": true,
              "url": "https://secure.techfor.com/labsapi/restservice.aspx?command=PRODUCTSEARCH&searchtext="+searchTerm+"&extendedinfo=n&page=1&sessionkey="+SessionKey+"",
              "method": "GET",
              "headers": {
                "cache-control": "no-cache",
              }
            }
            $.ajax(settings).done(function (response) {
                //console.log(response);
                $("#searchTerm").html(searchTerm);
                $scope.dragulaItems = [];
                for (i in response.Products) {
                    var name = response.Products[i].Name;
                    var imagePath = response.Products[i].ImagePath;
                    var EAN = response.Products[i].EANBarcode;
                    var price = response.Products[i].Price;
                    var offer = response.Products[i].OfferPromotion;
                    var offerValid = response.Products[i].OfferValidity;
                    $scope.dragulaItems.push ("{\"Name\": \""+name+"\",\"Price\": \""+price+"\",\"EANBarcode\": \""+EAN+"\",\"ImagePath\": \""+imagePath+"\",\"OfferPromotion\": \""+offer+"\",\"OfferValidity\": \""+offerValid+"\"}");
                }
                console.log($scope.dragulaItems); 
            });

        });

    }

]);

如果我手动更改 $scope.dragulaItems = [];说:

$scope.dragulaItems = [
{"Name":"Bob"},
{"Name":"Reggie"}
];

我收到了 2 件商品的返回,并且“名称”字段正确显示。我很困惑,因为数组中有 20 个项目正在通过,但其中的内容却没有通过。

最佳答案

您以错误的方式向数组添加项目。您需要创建一个 JavaScript 对象并设置不同的属性值,例如 NamePrice 等,然后将该对象推送到数组中。

试试这个。

for (var i in response.Products) {

  var name = response.Products[i].Name;
  var price = response.Products[i].Price;
  var eanBarCode= response.Products[i].EANBarcode;

  var item = { Name : name , Price : price, EANBarcode: eanBarCode };
  $scope.dragulaItems.push(item);

}

或者您可以使用angular.forEach for 循环。

angular.forEach(response.Products, function(value, key) {

  var name = value.Name;
  var price = value.Price;
  var eanBarCode = value.EANBarcode;

  var item = { Name : name , Price : price, EANBarcode: eanBarCode };
  $scope.dragulaItems.push(item);

});

关于javascript - 将数组写入 $scope (Javascript),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34347951/

相关文章:

javascript - 是的 - 逗号后允许两位数字,小数点的最小值和最大值

javascript - ondragenter 提醒容器的 .id

javascript - Leaflet 相当于 google toSpan() 函数

javascript - 如何根据用户点击的内容保存信息(类别)

javascript - 如何从另一个 Controller 调用一个 Controller 的功能

javascript - Chrome 的正则表达式 - 我可以查看它们吗?

javascript - bootstrap 表数据中不区分大小写的搜索

javascript - 如何保证 jQuery $ 被初始化?

angularjs - 在客户端使用 cookie 的 REST API 身份验证和授权工作流程

javascript - Angular : immediately return from ngClick function