2016-04-11 27 views
-1

Bir URL'de bir sorgu dizesinin değerlerinde bir angular.forEach işlevi çalıştırmaya çalışıyorum.Açısal işlevler için sıkıntı

aşağıdaki düşünün:

domain.com?quote=10&quote=20

bir dizi oluşturulurken, $scope.selectedQuotes = $stateParams.quote; beklendiği gibi işler ve çıkışlarını ["10", "20"] yapmak.

domain.com?quote=10

Bu çıkışlar '10' bir dize olarak ve her karakterinden forEach çalıştırır:

Ancak aynı işlevi ile

. Her zaman sınıflar bir dizi olarak değer böylece
$scope.selectedQuotes = $stateParams.quote; 
console.log($scope.selectedQuotes); 

angular.forEach($scope.selectedQuotes, function(quote){ 
} 

Yani soru, nasıl alırım edilir: Burada

tam kodudur? (:/Deneme çubuk = 1 & çubuk 3 2 & bar = = gibi) daha sonra değerler

+0

Bu benim için beklenen davranış gibi görünüyor. Bir dizi mi yoksa bir dizge mi olduğunu saptamanız ve buna göre hareket etmeniz gerekir. –

+0

@KevinB docs zaten aynı şeyi belirtmişti .. Bunu bir cevap olarak ekledim –

cevap

1

OK ... ekleme gibi string olarak kabul edilecektir.

+0

gerçekten ekleyerek işe yarar .. Şüphem .. –

+0

Evet. Şimdi mükemmel çalışıyor. –

1

Docs zaten

tek bir parametre için birden çok değer URL mevcut olup olmadığını belirtti Bir dizi ile eşleştirildi (örneğin: {foo: ['1', '2', '3']}). Bununla birlikte, sadece bir değer varsa (ör./Foo? Bar = 1), değer (ör. {Foo: '1'}) tek değer olarak kabul edilir.

bir dizi olarak devletin quote parametresine sahip gibi devlet iç array: true olarak değişkenin türüne sahip Yani olsa bile. Bu çözüldü devlet kontrolörü için

params: { 
    quote: { array: true } 
} 

: tek değer quote karşı belirdiğinde, O '10'

-1
if(Array.isArray($scope.selectedQuotes)){ 
//itar with angular.forEach 
    } else{ 
    $scope.selectedQuotes=[$scope.selectedQuotes] 
    // then itar with angular.forEach 
} 
0

Sen map() ile bunu yapabileceğimi:

$scope.selectedQuotes = $stateParams.quote; 
console.log($scope.selectedQuotes); 

angular.forEach($scope.selectedQuotes, function(quote){ 
    return quote.map(function(newArray) { 
     return newArray; 
    }); 
}