如何在promise的控制器之外使用函数变量

AngularJs - how to use function variable outside controller of promise

本文关键字:函数 变量 控制器 promise      更新时间:2023-09-26

service.js

.factory('tableService', ['$http', function($http){
    return {
        getTable: function() {
            return $http.get("data/timesheet.json");
        }
    }
}])

controller.js

.controller('tableCtrl', function($filter, $sce, ngTableParams, tableService) {
    var promise = tableService.getTable();
    promise.then(
         function(payload) {                    
            data = JSON.stringify(payload.data);
            alert(data);
        },
        function(errorPayload) {
            $log.error('failure loading movie', errorPayload);
        });
            //Editable
    this.tableEdit = new ngTableParams({
            page: 1,            // show first page
            count: 10           // count per page
        }, {
            total:data.length, // length of data
            getData: function($defer, params) {
                $defer.resolve(data.slice((params.page() - 1) * params.count(), params.page() * params.count()));
        }
    });
})

我对AngularJs很陌生。问题是,我没有得到JSON文件数据在我的表。在这里,我使用警报来检查数据是否来自JSON文件,它的工作,但不知何故得到空表作为数据没有显示在我的表。有人能帮帮我吗?

你的代码有几个问题,你应该使用$scope当你绑定数据到视图,

app.controller('myController', function($scope, myService) {
myService.getJSON().then(function(data){
            $scope.myData =data;
            console.log(data);
 });
});

app.service('myService', function($http) {
  this.getJSON = function() {
    return $http.get('test.json').then(function(data) {
      return data.data.items;
    });
  };
});

您需要一个作用域变量或一个控制器变量,并将获取的数据分配给它。下面是一个控制器变量的解决方案:

.controller('tableCtrl', function($filter, $sce, ngTableParams, tableService) {
        var self = this;
        var promise = tableService.getTable();
        self.tableData = [];
        promise.then(
            function(payload) { 
                data = JSON.stringify(payload.data);
                alert(data);
                self.tableData = data;
            },
            function(errorPayload) {
              $log.error('failure loading movie', errorPayload);
            });
        self.tableEdit = new ngTableParams({
            page: 1,            // show first page
            count: 10           // count per page
        }, {
            total: self.tableData.length, // length of data
            getData: function($defer, params) {
                $defer.resolve(total:tableData.slice((params.page() - 1) * params.count(), params.page() * params.count()));
            }
        });
    })

EDIT:下面的答案是在OP的编辑之前发布的

您指的是$scopedata属性:

total:$scope.data.length

但是你没有给它赋值。你应该更新你的promise回调:

function(payload) {     
    data = JSON.stringify(payload.data);
    alert(data);
    $scope.data = data;
}