繁体   English   中英

AngularJS Provider $ get方法在config()处出错

[英]Angularjs Provider $get method error at config()

我刚刚设置了一个简单的Provider,它将从Web服务器检索语言json文件,并通过config()方法将其提供给Angular。

所以我做了提供者:

 .provider('language', function () {

    var languageWsURL
      , languageCode
      , languageAppName;

    return {
      'setLanguageWsURL' : function (url) {

        languageWsURL =  url;
      },
      'setLanguageAppName' : function (name) {

        languageAppName = name;
      },
      'setLanguageCode' : function (code) {

        languageCode = code;
      },
      '$get': ['$rootScope', '$window', '$http', function ($rootScope, $window, $http) {

        var loadLanguage = function () {

          if (languageWsURL && languageCode && languageAppName) {

            $http({
              'method':'GET',
              'url': languageWsURL,
              'params': {
                'application':languageAppName,
                'langCode':languageCode
              }
            }).success(function (data) {

              if (data.data && data.data.length > 0) {

                $rootScope.lang = data.data;
              }
            }).error(function (err) {

              $window.console.log('Error while retrieving app lang - languageProvider : ' + err);
            });
          } else {

            $window.console.error('Missing params to load language in languageProvider');
          }
        };

        return {
          'loadLanguage':loadLanguage
        };
      }]
    };
  });

我在index.js中创建了一个小config()

.config(['languageProvider', function (languageProvider) {

    languageProvider.setLanguageWsURL('http://localhost:3000');
    languageProvider.setLanguageAppName('antani');
    languageProvider.setLanguageCode('en');
    languageProvider.loadLanguage(); //error here

  }]);

问题在于它无法正常工作,languageProvider.loadLanguage()在控制台中引发了一个很难理解的错误:

http://errors.angularjs.org/1.2.23/$injector/modulerr?p0=app&p1=TypeError%3A%20undefined%20is%20not%20a%20function%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A8000%2Fassets%2Fjs%2Findex.js%3A15%3A21%0A%20%20%2

有什么线索吗?

$get对象用于创建实际的服务。 在配置阶段不可用。

如果要在配置阶段调用loadLanguage函数,请在$ get实现之外定义它。

languageProvider没有方法loadLanguagelanguage有。 由于您无法向config()注入服务,因此您的代码应如下所示:

.config(['languageProvider', function (languageProvider) {
   languageProvider.setLanguageWsURL('http://localhost:3000');
   languageProvider.setLanguageAppName('antani');
   languageProvider.setLanguageCode('en');      

}])
.run(['language',function(language){
   language.loadLanguage();
}]);    

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM