2015-02-25 2 views
1

Я не склоняюсь к Угловому и просто продолжаю сталкиваться с небольшими проблемами здесь и там. Я не могу показаться, чтобы получить мой массив для отображения, оно просто показывает {{products}}ng-repeat not iterating array

JS Fiddle: http://jsfiddle.net/u5eBH/70/

HTML:

<div ng-app="products"> 
    <div ng-controller="ProductCtrl"> 

     <input type="checkbox" ng-click="includeBrand('Brand A')"/>Brand A<br> 
     <input type="checkbox" ng-click="includeBrand('Brand B')"/>Brand B<br> 
     <input type="checkbox" ng-click="includeBrand('Brand C')"/>Brand C<br> 

     <ul> 
      <li ng-repeat="p in products | filter:brandFilter"> 
       {{name}} 
      </li> 
     </ul> 
     </div> 
     </div> 

JS

'use strict' 

angular.module('products', []); 

function ProductCtrl($scope) { 
    $scope.products = [ 
     { 
         name: 'XXX-1A' 
         brand: 'Brand A', 
         material: 'tobacco', 
         size: '00', 
         type: 'water pipe', 
         style: 'heady', 
         feature: 'bent neck, coil condensor', 
         percolator: 'dome', 
         color:'red' 
        }, 
        { 
         name: 'XXX-2B' 
         brand: 'Brand B', 
         material: 'tobacco', 
         size: '00', 
         type: 'water pipe', 
         style: 'heady', 
         feature: 'bent neck, coil condensor', 
         percolator: 'dome', 
         color:'red' 
        }, 
        { 
         name: 'XXX-1C' 
         brand: 'Brand C', 
         material: 'tobacco', 
         size: '00', 
         type: 'water pipe', 
         style: 'heady', 
         feature: 'bent neck, coil condensor', 
         percolator: 'dome', 
         color:'red' 
        } 
       ]; 
      }); 

    $scope.brandIncludes = []; 

    $scope.includeBrand = function(brand) { 
     var i = $.inArray(brand, $scope.brandIncludes); 
     if (i > -1) { 
      $scope.brandIncludes.splice(i, 1); 
     } else { 
      $scope.brandIncludes.push(brand); 
     } 
    } 

    $scope.brandFilter = function(products) { 
     if ($scope.brandIncludes.length > 0) { 
      if ($.inArray(products.brand, $scope.brandIncludes) < 0) 
       return; 
     } 

     return products; 
    } 
} 

Кроме того, если кто-то мог бы связать меня с более подробными беседами о заявлении «ng-repeat =« x in x », я был бы очень признателен. Я просто не могу понять это достаточно хорошо, чтобы использовать его в себя. Спасибо!

+0

Это, но это должно быть '{{p.name}}', а не '{{name}}' –

+0

Обновлено и до сих пор не отображается для меня: ( –

+0

попробуйте в plnkr вместо –

ответ

1

Вы забыли запятые в своем определении JSON. Когда угловой не может оценить {{ curly brackets }}, обязательно проверьте свою консоль dev на наличие ошибок.

Например:

{ 
    name: 'XXX-1A'  // <-- here you don't have a comma (same for each item) 
    brand: 'Brand A', 
    material: 'tobacco', 
    size: '00', 
    type: 'water pipe', 
    style: 'heady', 
    feature: 'bent neck, coil condensor', 
    percolator: 'dome', 
    color: 'red' 
}, 

Кроме того, как отметил комментарием, он должен быть {{p.name}} вместо {{name}}

Вот неподвижная скрипку:

http://jsfiddle.net/a01g8wyp/

+0

Это прекрасно! Спасибо! Я проверил мою консоль dev и раньше получал «продукты не модуль», и не знал, что делать дальше. –

+0

mmh, когда я открываю ваш jsfiddle и проверяю консоль, у меня есть «Uncaught SyntaxError: Неожиданный идентификатор», и когда я нажимаю на строку, он явно показывает мне недостающую запятую. О да, а затем ошибка «нет модуля», которая является побочным эффектом первого: всегда исправляйте свои ошибки в том порядке, в котором вы их получите. – floribon

+0

Кстати, использование 'brandFilter' кажется странным: фильтр в ng-repeat будет обрабатывать каждый« продукт »и должен возвращать true, вы хотите его отобразить, иначе false. Ваш код действительно работает, но немного странно, что вы назвали параметр 'products' (множественное число) и вернули весь продукт вместо' true'. – floribon