Angularjs $范围令我困惑

时间:2015-03-18 15:44:35

标签: javascript json angularjs

我真的需要一些帮助......我现在试了好几个小时而且无法让它工作......

我有一个包含100个这样的产品的.json文件:

[{
    "ean": "3613132010420",
    "brand": "NewBrand",
    "desc": "A description",
    "feature1": "",
    "feature2": "",
    "feature3": "",
    "feature4": "",
    "feature5": "",
    "img": "",
    "metric": {
      "gender": "female",
    },
    "score":""
  },
  {
    "ean": "3613132010420",
    "brand": "NewBrand",
    "desc": "A description",
    "feature1": "",
    "feature2": "",
    "feature3": "",
    "feature4": "",
    "feature5": "",
    "img": "",
    "metric": {
      "gender": "female",
    },
    "score":""
  }]

我用$ http读取json并将所有内容放在$ scope.products中。数据显示在列表中,一切都很好。现在我想过滤产品并改变分数变量(在选项滑块上滑动后)。

由于角度数据绑定,视图也应该更新。

如何在$ scope中更改此变量? 这是我尝试过的,没有任何作用:

$('.find-style-slider .slick-list').bind('touchstart click', function(){
    angular.forEach($scope.products, function(value, key) {

    $scope.products[key].score = '25'; //nothing happens

    var obj = { score: '25' }; 
    $scope.products[key].push(obj); //Uncaught TypeError: undefined is not a function
    $scope.products.splice(key, 0, obj); //no error but $scope variable does not change
    $scope.products[key].unshift(obj); //Uncaught TypeError: undefined is not a function
    });
});

我是否需要更新内容或$ apply()? 我会感谢任何帮助/提示...

编辑:我认为$ scope不像我想的那样工作.... 我用服务填充$ scope.products:

productService.initDb().then(function(products) {
    $scope.products = products;
});

当我把这个

        var obj = { score: '25' };
        $scope.products.splice(0, 0, obj);

在initDb函数中,然后第一个元素被更新! 但不在外面。

现在的问题是:为什么?如何从服务功能外部访问$ scope.products?

我认为整个控制器的$ scope是相同的...... confused

1 个答案:

答案 0 :(得分:0)

$scope.products[key]是一个不是数组的对象。 push, splice, unshift方法是在不在对象上的数组上定义的。

尝试以下逻辑。

angular.forEach($scope.products, function(product) {
   product.score = '25';
})

如果需要,请尝试$scope.$apply()