【问题标题】:Data from database is not loaded to a variable on page load using angular来自数据库的数据未使用角度加载到页面加载时的变量
【发布时间】:2018-05-31 10:54:51
【问题描述】:

在页面加载时,我从数据库中获取数据并将其放入$scope.x。在我的网络选项卡中,我从我的数据库中获取列表,但它没有加载到我很快将使用ng-repeat 在下拉列表中需要的变量中。然而,在页面加载之后,当我单击一个检索数据并将其放在$scope.x 中的按钮时,我已经获得了这些值。如果我这样做,我不会在页面加载时获得值,只需单击将数据检索到变量的按钮,我也不会得到任何东西。我究竟做错了什么。以下是我的代码:

$scope.addProject = function () {
    debugger;
    console.log($scope.clientList);
    console.log($scope.userList);
};

$scope.getClients = function () {
    debugger;
    $http.get('/Clients/GetClients')
        .then(function (response) {
            $scope.clientList = response.data;
        });
};

$scope.getAllUsers = function () {
    debugger;
    $http.get('/User/GetAllUsers')
        .then(function (response) {
            $scope.userList = response.data;
        })
};

$scope.getClients();
$scope.getAllUsers();
$scope.addProject();

【问题讨论】:

    标签: angularjs angular-promise angularjs-http


    【解决方案1】:

    在从服务器返回数据之前调用addProject 函数。

    修改getClientsgetAllUsers函数返回promise:

    $scope.addProject = function () {
        debugger;
        console.log($scope.clientList);
        console.log($scope.userList);
    };
    
    $scope.getClients = function () {
        debugger;
        ̲r̲e̲t̲u̲r̲n̲ $http.get('/Clients/GetClients')
            .then(function (response) {
                $scope.clientList = response.data;
            });
    };
    
    $scope.getAllUsers = function () {
        debugger;
        ̲r̲e̲t̲u̲r̲n̲ $http.get('/User/GetAllUsers')
            .then(function (response) {
                $scope.userList = response.data;
            })
    };
    

    然后使用$q.all 等待承诺:

    var clientsPromise = $scope.getClients();
    var allUsersPromise = $scope.getAllUsers();
    
    $q.all([clientsPromise, allUsersPromise])
      .then(function() {
        $scope.addProject();
    });
    

    【讨论】:

    • $q 服务需要像注入 $http 服务一样注入到控制器中。
    • 哇!那行得通!您能否解释一下为什么它不适用于我的原始代码以及为什么我们需要添加 $q.all 或 promise?
    【解决方案2】:

    你应该得到这样的数据

    var getclients= function(){
    
        debugger;
        console.log($scope.clientList);
        console.log($scope.userList);
    };
    
    
    getclients();
    

    【讨论】:

    • 我已经在页面加载时调用了 $scope.getClients() 和 $scope.getAllUsers()。请检查我的代码,它在代码的底部。
    • 现在,当我应用您的建议时,不会调用 addProjects。请查看我的更新代码。
    猜你喜欢
    • 1970-01-01
    • 2018-12-04
    • 1970-01-01
    • 2021-06-21
    • 2021-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多