angularJS在控制器内分配变量

angularJS在控制器内分配变量,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, head

我有一个控制器引入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');
 });
}
这非常有效,但是我需要使用phones范围(产品id)中的一项来获取第二个范围中的正确功能。我是否放置类似于:

var productid = phones.1.productid;
在功能范围内?在页面上?我用“ng data repeat”来列出手机,我会把变量放在repeat中吗?我尝试了多种方法将产品id{{phone.1.ProductID}}插入到features作用域:{{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']];

根据您的编辑,并假设属性名称为ProductID:

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

好的,我想我理解--
数据。equipmentSearchFeatures
有一个名为Features的属性,它是一个数组,数组的成员有一个名为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;
  }
};
@cfox:试试这个:

console.log(JSON.stringify(phones));
看看你是否在寻找正确的元素

但我想你想做什么

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

相反

通过重新格式化json文件来解决问题。重新格式化json文件将功能直接移动到产品下方,而不是单独的数组。我确信有一种方法可以用AngularJS解决这个问题,但不到一周的时间,我就无法找到解决方案。

Javascript中的数组索引应该用作
arr[5]
arr.5
是无效语法。这是我问题的一部分,我知道如何使用双花括号调用该值,但我不确定如何在函数中正确分配它(或者我是否在这里分配值)。如果我不清楚的话,很抱歉。多了解一点您正在尝试做的事情可能有助于引导您找到答案。请参阅我的上一次编辑。我需要第一个作用域中的值,才能从第二个作用域中获得正确的值。我意识到这可能更像是一个JavaScript问题,而不是AngularJS。@cfox:正如我在回答中所说的,我认为您希望阅读$scope.phones而不是phones。这并没有改变输出,仍然显示phones,但没有显示测试功能。对不起,我以为您只是想获取productId。你能再解释一下功能结构吗?只是json文件中位于“提供基本数据”之后的另一部分。您可以从第二个作用域看到它的结构,我只需要附加第一个作用域中的产品id即可提取该产品的功能。@PhilSandler:可能是phones[1].productID;?(p不是p)@Lame up duck:这不是它不起作用的原因-你有什么建议吗?不起作用。控制台表示无法准备变量productid的属性。看起来它无法在函数中以这种方式获取声明它的productid。我应该把它放在一个单独的函数中还是放在HTML页面的某个地方?@cfox:console.log(JSON.stringify($scope.phones))没有帮助?没有,这不会导致任何更改。