在angularJs中将值从提供者传递给控制器

时间:2016-07-15 07:50:15

标签: javascript angularjs

我正在尝试从db获取数据到UI。通过提供商提供的网址是获取数据。

控制器DetailsProvider.getDashboardDetails()中的

控制器变为空。

var appmod = angular.module('project.DetailDashboardController', []);

appmod.controller("DetailDashboardController", ['$rootScope', '$scope', '$state', 'DetailsProvider',function($rootScope, $scope, $state,DetailsProvider) {
    console.log("DetailDashboardController --- ");

    $scope.DetList= DetailsProvider.getDashboardDetails()

}]);

})(window, window.angular);

提供商将调用列表

(function(angular) {

var appmod = angular.module('project.DetailsServiceProvider', []);  
appmod.provider('DetailsProvider', function() {
    this.$get = ['_$rest', function DetailServiceFactory(_$rest) {
        return new DetailsProvider(_$rest);
    }];
});

function DetailsProvider(_$rest) {
    this._$rest = _$rest,
    this.getDashboardDetails = function(_callback, _data) {
        var newData = null;
        _$rest.post({
            url: window.localStorage.getItem('contextPath') +'home/listdetail',
            data: {} ,
            onSuccess:_callback
            }
        });

    }
};

})(window.angular);

提前感谢您的任何回复!

1 个答案:

答案 0 :(得分:1)

您应该从服务方法返回promise并在控制器中执行then

根本原因:您正在返回newData,这将在完成ajax调用之后进行初始化。在完成之前,您将返回相同的变量,该变量将始终为null。

在提供者中,

(function(angular) {

var appmod = angular.module('project.DetailsServiceProvider', []);  
appmod.provider('DetailsProvider', function() {
    this.$get = ['_$rest', function DetailServiceFactory(_$rest) {
        return new DetailsProvider(_$rest);
    }];
});

function DetailsProvider(_$rest) {
    this._$rest = _$rest,
    this.getDashboardDetails = function(_callback, _data) {
        var newData = null;
        _$rest.post({
            url: window.localStorage.getItem('contextPath') +'home/listdetail',
            data: {} ,
            onSuccess:_callback
            }
        });         
    }
};

})(window.angular);

并在控制器中,

$scope.list = function() {
    DetailsService.getDashboardDetails(function(data){

            varr holdIt = data.data.DList;

        });
};