如何从服务函数中获取控制器中的对象长度

时间:2015-06-16 12:20:02

标签: angularjs multidimensional-array

内部控制台返回length的值,但外部控制台返回未定义的值。请让我知道我缺少的地方。 listFetch是一项服务。

.controller('list', function($scope,$routeParams,listFetch){
        $scope.listCurrent={};
        $scope.id=$routeParams.id;
        var listNumber,len;
        listNumber='list'+$scope.id;
        listFetch.getList().success(function(data) {
            $scope.listCurrent = data[listNumber];
            console.log($scope.listCurrent.length);
        });
        len=$scope.listCurrent.length;
        console.log(len);

});

`

2 个答案:

答案 0 :(得分:1)

listFetch.getList()是一个异步函数,这意味着它只会在片刻之后为您提供结果。但你马上就要求它(在“外部”控制台日志中)。

你可以这样做:

$scope.$watch('listCurrent', function () {
    len=$scope.listCurrent.length
    console.log(len);
}

小问题: $scope.$watch也会在控制器初始化时运行,而$scope.listCurrent实际上是undefined。要考虑它,您可以这样做:

$scope.$watch('listCurrent', function (newVal, oldVal) {
    if (newVal !== oldVal) {
        len=$scope.listCurrent.length
        console.log(len);
    }
}

(在第一次观看时,旧值和新值都未定义,以后不会发生;)

答案 1 :(得分:0)

我在angularJS中使用了jQuery,然后在控制器内部调用服务:

listFetch.getList().success(function(response){
    $scope.sliders = response.data;
 });

console.log($($scope.sliders).length);

返回数组的长度。

使用此声明在index.html中声明angularjs之前的jquery。

我希望这会有所帮助。