调用rest webservice并将值赋给Angularjs中的变量

时间:2017-10-02 10:57:17

标签: angularjs asynchronous

我在我的控制器中定义了一个函数,该函数调用AngularJs中的rest web服务。我需要将函数返回的值赋给变量。可以使用不同的参数多次调用该函数,并将返回的值赋给不同的变量。

我的控制器中的函数接受一个参数,然后将该参数传递给Web服务。

function disableBlockFn(blocKName) {

        var data = {
            formId: vm.formId,
            blockId: blocKName,
            statusId: vm.statusId,
            roleId: vm.roleId
        }

        roleService.displayBlock(data).then(function (data) {
            return data[0];
        });
    }

当我将上述函数的值赋给变量并在控制台上打印时,我得到' Undefined'

vm.pilot = vm.disableBlockFn('pilot_mpr_qualite_1');
console.log('pilot ', vm.pilot);

vm.pilot_ang = vm.disableBlockFn('pilot_mpr_qualite_ang');
    console.log('pilot ', vm.pilot_ang);

请求WS的功能

 function displayBlock(objBlock) {
    var defer = $q.defer();
    $http({
        method: 'GET',
        url: config.urlPath + 'api/block/block'
    }).then(function (data) {
        var results = data;
        defer.resolve(results.data.data);
    }, function (data, status) {
        defer.reject({
            data: data,
            status: status
        });
    });

    return defer.promise;
}

1 个答案:

答案 0 :(得分:1)

您需要从disableBlockFn返回一个承诺。如果您的功能在控制器中,则可以直接设置该值。

function disableBlockFn(blocKName) {
    var data = {
        formId: vm.formId,
        blockId: blocKName,
        statusId: vm.statusId,
        roleId: vm.roleId
    }
    //here you can return only your promise
    return roleService.displayBlock(data);
}

然后,解决控制器中的承诺:

vm.disableBlockFn('pilot_mpr_qualite_1').then(function(data) {
    vm.pilot = data;
    console.log('pilot ', vm.pilot);
});

<强>编辑: 如果您的功能在控制器中,您可以这样做:

function disableBlockFn(blocKName) {
    var data = {
        formId: vm.formId,
        blockId: blocKName,
        statusId: vm.statusId,
        roleId: vm.roleId
    }

    return roleService.displayBlock(data)
        .then(function(data){
            vm.pilot = data[0];
        });
}