javascript - Angularjs未定义错误范围变量

标签 javascript angularjs json angularjs-scope

大家好,我在使用 angularjs 时遇到了一些困难。我今天花了一整天的时间试图弄清楚这一点!我对此很陌生,并且真的很困惑,所以希望有人可以提供帮助。我收到错误“无法读取未定义的属性‘长度’”。我的程序有一个从 .json 文件获取的对象“$scope.products”数组。我过滤此数组以仅显示那些带有以下内容的产品: 类别:“特别优惠”..

$scope.specialOffers = $filter('filter')($scope.products,{category:"Special 
Offers"}, true);

然后获取这个新数组的长度并将其传递给我的 randomInt 函数,从而创建一个介于 0 和数组长度之间的随机整数..但由于某种原因 '$scope.specialOffers' 显示为未定义..这是完整 Controller 代码:

app.controller('ProductsController', ['$scope','$filter', 'productFactory', 
'$location', '$routeParams', 
function ($scope, $filter, productFactory, $location, $routeParams) {

$scope.path;
$scope.category;
$scope.products;
$scope.rand;
$scope.specialOffers;
$scope.id = $routeParams.id;

specifyCategory();
getProducts();

$scope.specialOffers = $filter('filter')($scope.products,{category:"Special Offers"}, true);

$scope.rand = randomInt($scope.specialOffers.length, 0);

function specifyCategory() {
    $scope.path = $location.path();
    if ($scope.path == "/products/woodentoys") {
        $scope.category = "Wooden Toys"
    } else if ($scope.path == "/products/woodenaccessories") {
        $scope.category = "Wooden Accessories"
    } else if ($scope.path == "/products/specialoffers"){
        $scope.category = "Special Offers"
    }
}

function getProducts() {
    productFactory.getProducts()
        .then(function (response) {
            $scope.products = response.data;

        }, function (error) {
            $scope.status = 'unable to load product data ' + error.message;
        });
}

function randomInt(max,min){
    max++;
    return Math.floor((Math.random())*(max-min))+min;
}

}]);

这是我关于堆栈溢出的第一个问题,感谢您的耐心等待 非常感谢!

最佳答案

在没有看到实际的错误消息的情况下,我的第一个猜测是 $scope.products 在被过滤之前没有被设置。看起来 getProducts 返回一个异步 promise :

function getProducts() {
    productFactory.getProducts()
        .then(function (response) {
           $scope.products = response.data;

        }, function (error) {
           $scope.status = 'unable to load product data ' + error.message;
    });
}

如果您还没有尝试过,请将对此数据的访问转移到匿名回调函数中。

function getProducts() {
    productFactory.getProducts()
        .then(function (response) {
            $scope.products = response.data;
            $scope.specialOffers = $filter('filter')($scope.products, {category:"Special Offers"}, true);
            $scope.rand = randomInt($scope.specialOffers.length, 0);
        }, function (error) {
            $scope.status = 'unable to load product data ' + error.message;
        });
}

关于javascript - Angularjs未定义错误范围变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49089082/

相关文章:

javascript - 在不使用递归的情况下改进连续范围的子集和算法

javascript - 元素是在 DOM 中另一个元素之前还是之后

javascript - jQuery 原型(prototype)

javascript - Angularjs 动态表单内容

javascript - 使用自定义格式将非空 json 数据作为查询字符串发送

json - 在 swift3 中将 json 数据转换为数组

php - 在 Drupal 中向 OnLoad 添加函数

javascript - Angular.js ng-repeat 问题

javascript - 将新项目推送到 mongoDB 文档数组

javascript - 在 Filestack v3 中不获取 JSON 的值