【问题标题】:Call to a function within $get of Provider modules causes TypeError调用 Provider 模块的 $get 中的函数会导致 TypeError
【发布时间】:2019-03-12 02:47:37
【问题描述】:

这是我的提供者。

App.provider('cloudinaryDetails', function(CloudinaryProvider){

function setCloudinaryDetails(cloudinaryDetails){
    CloudinaryProvider.configure({
        cloud_name: cloudinaryDetails.cloud_name,
        api_key: cloudinaryDetails.api_key
    });
}

this.$get = function($http){
    return {
            initialize: function(){
            return $http.get('path/to/api').then(function(response){
                setCloudinaryDetails(response.data);
            });
        }
    };
};

});

我在配置模块中调用初始化函数

App.config(function(cloudinaryDetailsProvider){
cloudinaryDetailsProvider.initialize();

});

控制台错误:

[$injector:modulerr] 无法实例化模块 App 由于: TypeError: cloudinaryDetailsProvider.initialize 不是函数

【问题讨论】:

  • 你不能在配置函数中调用$get(constructor)的方法..
  • @PankajParkar 我需要在配置中设置 Cloudinary 详细信息(cloudName,api_key),我想从服务器获取这些详细信息。我该怎么做?

标签: javascript angularjs


【解决方案1】:

原因:

您正在注入cloudinaryDetailsProvider“提供者”,但initialize 未在提供者上定义,而是在实例上定义。

建议修复:

要获得对cloudinaryDetails“实例”的引用,请创建一个运行块并注入实例而不是提供程序。

App.run(function(cloudinaryDetails){
  cloudinaryDetails.initialize();
});

请参阅 AngularJS docs 了解有关提供商如何工作的说明

【讨论】:

    猜你喜欢
    • 2021-06-20
    • 2020-03-04
    • 2016-09-04
    • 1970-01-01
    • 1970-01-01
    • 2017-01-11
    • 1970-01-01
    • 2011-06-04
    相关资源
    最近更新 更多