2016-09-15 3 views
0

Я пытаюсь выполнить ng-повтор внутри краха ng-repeat. Мой внутренний ng-repeat повторяет весь массив внутри каждого div. Я попытался проследить по индексу, но до сих пор не решимостью:Угловое ng-repeat внутри ng-repeat collapse

<div class="col-md-4"> 
<div id="markets"> 
    <div class="panel panel-default" ng-repeat="m in marketResults | limitTo:5"> 
     <div class="panel-heading" ng-click="m.isCollapsed = !m.isCollapsed">{{m.marketname}} 
     </div> 
     <div uib-collapse="!m.isCollapsed"> 
      <div ng-repeat="s in stuff" > 
       <p>{{s.$$state.value.Address}}</p> 
       <p>{{s.$$state.value.GoogleLink}}</p> 
       <p>{{s.$$state.value.Products}}</p> 
       <p>{{s.$$state.value.Schedule}}</p> 

      </div> 
     </div> 
    </div> 
</div> 

Внутри контроллера:

_getLocation: function(key) { //extract latlng from _recordsCache 

    var latLong = this._recordsCache[key]; 

    // console.log(latLong); 
    fmCoordinates.lat = latLong.lat; 
    fmCoordinates.lng = latLong.lng; 

    var promise = requestMarkets(fmCoordinates.lat,fmCoordinates.lng); 
    promise.then(function(marketData) { 
     $scope.marketResults = marketData.results; //receiving market data 
     $scope.quantity = 5; //limit market data to 5 
     $scope.marketInfo = []; 
     $scope.getInfo = function(){ 
     return $scope.marketInfo; 
     } 

     for(var property in $scope.marketResults) { 
     var id = $scope.marketResults[property].id; 
     console.log(id); 
     $scope.marketInfo.push(getDetails(id));// brings back the details 
     }; 
     console.log($scope.getInfo()); 


    }, function(reason) { 
     console.log('Failed: ' + reason); 
    }); 
    if(this._recordsCache.hasOwnProperty(key)) 
     return latLong;//then after use .loc attribute 
    else 
     return false; 
    }, 
+2

Я не вижу, где вы используете 'M' для filter 'stuff', поэтому я бы предположил, что в каждом' m' он отобразит весь массив. Вы можете сделать что-то вроде 'ng-repeat = 's в m.stuff'. Но вам нужно предоставить более подробную информацию о том, чего вы пытаетесь достичь. – taguenizy

+0

yes ... внутренние повторы обычно (но не всегда) повторяются по массиву элементов в родительском объекте, изолированном во внешнем повторении. Показать данные smple – charlietfl

+0

У меня есть два массива. Первый массив возвращает мне имена рынков [{marketname, id}]. Затем я возвращаю второй массив, используя id из первый массив, который возвращает массив с информацией о рынке. [{Расписание, Адрес, Часы}]. Два массива находятся в последовательности. Сначала я показываю имя рынка на панели div, затем, когда вы нажимаете на панель, вы видите детали из второй массив – user4955287

ответ

0

Вам нужно добавить второй массив в качестве свойства каждого элемента в первом массиве. Смотрите ниже код:

HTML: Вместо написания нг-повтора = "s в хлам", мы будем писать нг-повтор = "s в m.stuff"

<div class="col-md-4"> 
<div id="markets"> 
    <div class="panel panel-default" ng-repeat="m in marketResults | limitTo:5"> 
     <div class="panel-heading" ng-click="m.isCollapsed = !m.isCollapsed">{{m.marketname}} 
     </div> 
     <div uib-collapse="!m.isCollapsed"> 
      <div ng-repeat="s in m.stuff" > 
       <p>{{s.$$state.value.Address}}</p> 
       <p>{{s.$$state.value.GoogleLink}}</p> 
       <p>{{s.$$state.value.Products}}</p> 
       <p>{{s.$$state.value.Schedule}}</p> 

      </div> 
     </div> 
    </div> 
</div> 

контроллер: Первый весовой рынокРезультаты массива. Затем в течение цикла, цикл по каждому элементу в marketResults и загружать второй массив, используя идентификатор и сохранить его как вещи собственности для каждого элемента, так что мы можем получить доступ к второму массиву, используя m.stuff в нг-повторить

_getLocation: function(key) { //extract latlng from _recordsCache 

var latLong = this._recordsCache[key]; 

// console.log(latLong); 
fmCoordinates.lat = latLong.lat; 
fmCoordinates.lng = latLong.lng; 

var promise = requestMarkets(fmCoordinates.lat,fmCoordinates.lng); 
promise.then(function(marketData) { 
    $scope.marketResults = marketData.results; //receiving market data 
    $scope.quantity = 5; //limit market data to 5 

    for(var market in $scope.marketResults) { 

    market.stuff = getDetails(market.id);// brings back the details 

    }; 

}, function(reason) { 
    console.log('Failed: ' + reason); 
}); 
if(this._recordsCache.hasOwnProperty(key)) 
    return latLong;//then after use .loc attribute 
else 
    return false; 
}, 
+0

Это не работает. Я получаю undefined для моего значения id – user4955287

+0

Проверьте свой рынокResults массив, чтобы проверить, как вы получаете значение id –

0

Вы может использовать ng-init для хранения дочерних элементов в каждой родительской строке. Передайте id в getChild (m.id) и получите дочерний элемент, а затем используйте его во втором цикле.

нг-INIT = "rowchild = GetChild (m.id)"

<div id="markets"> 
    <div class="panel panel-default" ng-repeat="m in marketResults | limitTo:5" ng-init="rowchild = getChild(m.id)"> 

     <div class="panel-heading" ng-click="m.isCollapsed = !m.isCollapsed"> 
      {{m.marketname}} 
     </div> 

     <div uib-collapse="m.isCollapsed"> 

      <div ng-repeat="s in rowchild"> 

       <p>{{s.Address}}</p> 

      </div> 

     </div> 
    </div> 
</div> 
0
<div class="col-md-4"> 
    <div id="markets"> 
     <div class="panel panel-default" ng-repeat="m in marketResults | limitTo:5"> 
      <div class="panel-heading" ng-click="m.isCollapsed = !m.isCollapsed">{{m.marketname}} 
      </div> 
      <div uib-collapse="!m.isCollapsed"> 
       <div> 
        <p>{{m.stuff.$$state.value.Address}}</p> 
        <p>{{m.stuff.$$state.value.GoogleLink}}</p> 
        <p>{{m.stuff.$$state.value.Products}}</p> 
        <p>{{m.stuff.$$state.value.Schedule}}</p> 

       </div> 
      </div> 
     </div> 
    </div> 
</div> 

// Внутри контроллера

_getLocation: function(key) { //extract latlng from _recordsCache 

    var latLong = this._recordsCache[key]; 

    // console.log(latLong); 
    fmCoordinates.lat = latLong.lat; 
    fmCoordinates.lng = latLong.lng; 


    var promise = requestMarkets(fmCoordinates.lat,fmCoordinates.lng); 
    promise.then(function(marketData) { 
     $scope.marketResults = marketData.results; //receiving market data 
     $scope.quantity = 5; //limit market data to 5 
     $scope.marketInfo = []; 
     console.log($scope.marketResults); 

     for (var i = 0; i < marketData.results.length; i++){ 
     marketData.results[i].stuff = getDetails(marketData.results[i].id); 
     }; 

    }, function(reason) { 
     console.log('Failed: ' + reason); 
    }); 
    if(this._recordsCache.hasOwnProperty(key)) 
     return latLong;//then after use .loc attribute 
    else 
     return false; 
    }, 
Смежные вопросы