如何在Angularjs中发布后访问数据

时间:2015-12-17 09:32:31

标签: angularjs angularjs-service angularjs-controller

我的观众

<button type="submit" ng:click="sendviewer(vl.viewerid)" ></button>

我的控制器

$scope.viewerDetails = [];
var viewerid = [];

$scope.sendviewer = function(viewer){
    var success = function(data)
    {
        for( var i = 0; i < 1; i++ )
        {
            var obj = data[i];
            if(obj.viewerid != undefined) {
                viewerid.push(obj.viewerid);
            }
        }
        $scope.viewerDetails = viewerid;
    }

    viewerService.postViewer(viewer).success(success);
}

我的服务

return {
    postViewer: function(viewer){
        $location.path('/viewerdetails');
        return $http({ 
            method: 'POST', 
            url: 'api.php', 
            data: { 
                'view': viewer 
            },
              headers: {'Content-Type': 'application/x-www-form-urlencoded'} 
        });
    }
}

我的返回数据在函数内存中可用,但是如何在函数外部访问该数据以便在我的视图中访问?如果我尝试{{viewerDetails.viewerid}}将显示空白。

2 个答案:

答案 0 :(得分:1)

好吧,看起来for循环只是不必要的,实际上有点奇怪。

$scope.viewerIds = [];

$scope.sendviewer = function(viewer){
    var success = function(data)
    {
        var obj = data[0];
        if(obj.viewerid != undefined) {
           $scope.viewerIds.push(obj.viewerid);
        }
    }

    viewerService.postViewer(viewer).then(success);
}

您也不应该使用success,因为它已被弃用。使用与then的承诺语法。 这会将调用结果的id添加到$ scope.viewerIds数组中。 如果这是你想要的,那就不明确了。但对我来说它看起来像。

你确定data就像你期望的那样吗?第一个元素是对象的数组。说实话,这也是一种奇怪的api。

然后在你的html中你可以循环数组来显示id:

<div ng-repeat="id in viewerIds"> ID: {{id}}</div>

答案 1 :(得分:0)

由于viewerid是本地数组变量,因此存储在其中的数据在范围之外不可用。您应该将viewerid存储在$scope内。像

$scope.viewerid = [];

现在可以在DOM上访问它。