2013-10-29 172 views
1

AngularJS菜鸟内分配一个变量谁不完全知道所有的行话中还,所以请与我裸:)angularJS控制器

我有一个控制器带来一个JSON文件的内容:

function phoneListController($scope, $http) { 
$http.get('phones.json').success(function(data) { 
    $scope.phones = data.offers_basic_data; 
    $scope.features = data.equipmentSearchFeatures; 
}).error(function(data, status, headers, config) { 
    console.log('error'); 
}); 
} 

这很好用,但是我需要使用手机范围(产品ID)中的其中一项来获取第二个范围中的正确功能。我是否会放置类似:

var productid = phones.1.productid; 

内的函数?在页面上?我正在使用“ng-data-repeat”列出电话,我是否会将该变量放在重复内?我尝试了多种方法将产品ID {{phone.1.ProductID}}插入到功能范围:{{features.productID.0}},但我在那里没有做任何事情似乎可行。任何想法/建议?

如果我使用了错误的术语,请纠正我,我已经使用了不到一周的angularJS!


我试图函数中指定一个变量,但它没有工作:

var productid = phones[1]['productID']; 

这里就是我如何在HTML中把它叫做:

Test: {{features.productid.0}} 


好我真的很接近,我知道我错过了一些非常愚蠢的/小东西:

$scope.phones = data.offers_basic_data; 
console.log(JSON.stringify(phones)); 
var productid = $scope.phones[1]['ProductID']; 
$scope.features = data.equipmentSearchFeatures['Features'][productid]; 

上述不起作用,但电话正在页面上再次列出,而不是白色没有。我觉得我没有正确地将变量合并到数组中。


这里的第二阵列的一个镜头:

[equipmentSearchFeatures] => Array 
    (
     [Features] => Array 
      (
       [12312] => Array 
        (
         [0] => Test - no 

下使用该行,而不是尝试,仍然显示的手机,而不是测试功能:

$scope.features = data.equipmentSearchFeatures['Features'][$scope.phones[1]['ProductID']]; 
+0

Javascript中的数组索引应该用作'arr [5]'; 'arr.5'不是有效的语法。 –

+0

这是我的问题的一部分,我知道如何使用双括号调用该值,但我不确定如何在函数内正确地分配它(或者如果这甚至是我赋值的地方)。对不起,如果我不清楚。 – cfox

+0

更多关于你正在尝试做什么的背景可能会有助于指导一个答案。 –

回答

0

通过重新格式化显着重新格式化json文件,直接在产品下移动特征而不是单独的数组。我确信有一种方法可以使用AngularJS来解决这个问题,但是不到一个星期我就无法找出解决方案。

0

基于您的编辑,并假设属性名称为ProductID:

var productid = $scope.phones[1].ProductID; 

编辑

好吧,我想我明白 - data.equipmentSearchFeatures有一个属性叫做特点即是一个数组,数组的成员有一个名为的productId属性,你想找到一个与您的变量productId相匹配?

您将需要一个循环。这不是语法检查,但是应该接近:

var productid = $scope.phones[1].ProductID; //get the product id 

//loop over the Features collection until you match the productId 
angular.forEach(data.equipmentSearchFeatures.Features, function(feature){ 
    if (feature.productId == productId){ 
    //now set the scope variable to the matching item 
    $scope.features = feature; 
    } 
}; 
+0

这并没有改变输出,仍然显示手机,但没有测试功能。 – cfox

+0

对不起,我以为你只是想获得productId。您能否更详细地解释功能结构? –

+0

只是位于“offers_basic_data”之后的json文件的另一部分。您可以从第二个示波器看到它的结构,我只需要附加第一个示波器的产品ID以便为该产品提供特征。 – cfox

0

@cfox:试试这个:

console.log(JSON.stringify(phones)); 

,看看你正在寻找正确的元素!

但我认为你想要做

var productid = $scope.phones[1].ProductID; 

,而不是!

+0

没有工作。控制台说它不能准备变量productid的属性。看起来它没能让productid在函数内以这种方式声明它。我应该在单独的函数中还是在某个HTML页面上使用它? – cfox

+0

@cfox:* console.log(JSON.stringify($ scope.phones))*没有帮助? –

+0

没有,没有导致任何变化。 – cfox