在rails上使用angularjs和ruby时出现未知的提供程序电子提供程序错误

时间:2013-12-16 06:05:59

标签: javascript ruby-on-rails angularjs dependency-injection minify

我有一个Rails / AngularJS应用程序,可以在本地开发环境中正常运行。但是,当我将此应用程序部署到Amazon Cloud时,AngularJS会在浏览器控制台中返回此错误:

Unknown provider: eProvider <- e

然而,它在开发环境中运行良好。

我从我的一个javascript文件中访问以下服务..例如: -

userList. storeActorListWithId()

我的服务如下: -

 woi.service('userList',['$rootScope', 'userAPI' , 'recoAPI', function($rootScope, userAPI, recoAPI){

    var actorList = [];
    var actorId = "";
    return{
        storeActorListWithId: function(data){
            actorList = [];
            angular.forEach(data,function(actor){
                if(actor.castname)
                {
                    actorList.push({name: actor.castname,id: actor.castid});
                }
            })
        } ,
        getActorListWithId: function(){
            return actorList;
        },
        storeActorId: function(id){
            actorId = id;
        },
        getActorId: function(){
            return actorId;
        }
    }

}]);

我的application.js文件如下。是否安全缩小。

 resolve: {
                checkActorId: function($route,$location,$rootScope){
                    var url = $route.current.params.id;
                    var actorName = url.replace(/\-/g, " ").replace(/\~/g, "-").replace(/\$/g, "/");
                    var  actorList = $rootScope.storeActorNameAndId;
                    if($rootScope.storeActorNameAndId){
                        angular.forEach(actorList, function(actor, key){
                            if(actor.name == actorName){
                                $rootScope.actorid = actor.id;
                            }
                        });
                    }
                    else
                    {
                        $location.path("home")
                    }
                }
            }

我在网站上尝试了许多解决方案(使用DI),但没有一个能帮助我。 请帮助我..

提前致谢

3 个答案:

答案 0 :(得分:40)

经过数小时的研究后,终于得到了解决方案。

解析块中存在 minification-safe 注释的问题。这段代码给出了上述错误。

resolve: {
    setParams: function($rootScope, $route) {
        $rootScope.Programmeid = $route.current.params.programmeid;
        $rootScope.channelid = $route.current.params.channelid;
    }
}

我通过将代码更改为:

来解决它
resolve: {
    setParams: ['$rootScope', '$route', function($rootScope, $route) {
        $rootScope.Programmeid = $route.current.params.programmeid;
        $rootScope.channelid = $route.current.params.channelid;
    }];
}

答案 1 :(得分:0)

在我的情况下

app.config(function ($stateProvider) {
  $stateProvider
    .state('A', {
      ...,       
    });
});

已更改为

app.config(["$stateProvider", function ($stateProvider) {
  $stateProvider
    .state('A', {
      ...,       
    });
}]);

然后缩小工作

答案 2 :(得分:0)

在我的情况下(Rails应用),我必须从uglifier中删除Gemfile gem,然后删除config/environments/production.rb中的配置行:

config.assets.js_compressor = :uglifier